Background Image
조회 수 37490 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
소개: CUBRID 데이터 저장 방식을 설명하고, compactdb, DB 재구성 등의 작업을 통한 조회 성능 향상과의 관계를 설명한다.

적용 대상: CUBRID2008

.

CUBRID 데이터 저장 구조

CUBRID의 테이블은 물리적으로 힙 파일이라는 형태로 저장된다. 힙 파일은 여러 개의 페이지로 구성되고, 페이지 안에 해당 테이블의 레코드가 저장된다.

DBMS에 관리되는 데이터는 대부분 크기가 작으며, 수량이 많고, 시간이 지날수록 증가한다. 따라서 크기가 작은 많은 량의 레코드를 가변적으로 저장하기 위해 힙 파일은 linked list로 구성된 여러 개의 페이지로 구성되어 있고, 한 페이지에 여러 레코드를 저장하기 위해 slotted page 방식을 사용한다.

저장 구조를 간단히 도식화하면 아래와 같다.

위 구조를 직원이라는 테이블을 예로 들어 설명하면

직원 테이블을 힙 파일이라고 생각하고, 직원 테이블에 홍길동이라는 직원을 입력(rec1)하면 해당 데이터가 레코드 단위로 페이지에 저장된다. 직원을 계속 추가(rec2, rec3)하였을 경우 동일한 페이지에 레코드를 저장하는데 저장공간이 부족하게 되면 다음 페이지를 추가로 할당하여 레코드를 저장한다.(rec4)

이러한 방식으로 하나의 힙 파일은 필요에 따라 동적으로 페이지를 추가해가며 레코드를 가변적으로 저장한다.

데이터 저장 영역 변화로 인한 검색 속도 저하

varchar 데이터 타입을 사용하는 경우에 최초 저장 당시 보다 수정 시 데이터의 크기가 작거나 크게 변경되는 경우 레코드의 크기가 변경된다. 레코드의 크기 변경은 데이터 저장 영역의 변화로 이어질 수 있다.

아래는 이와 같은 저장 영역 변화의 대표적인 예이다.


1.     사원번호(no), 사원명(name), 주소(add) 컬럼을 가지는 직원(emp) 테이블이 있다. 이때 주소 컬럼은 데이터의 크기가 일정하지 않기 때문에 varchar로 선언한다.

2.     직원 테이블에 데이터를 입력하는데 주소 정보가 정확하지 않아 대략적인 데이터가 저장된 직원도 있다.

3.     페이지에 사용자가 입력한 데이터들이 모두 입력되어 더 이상 저장될 공간이 없게 되었다..

4.     주소 정보가 확인이 되어 주소를 변경하였다.

5.     그런데 이미 해당 페이지에 빈 공간이 모두 사용되었기 때문에 수정으로 발생한 데이터를 저장할 공간이 없게 되었다. 이러한 경우 새로운 페이지를 할당하여 변경할 수 없었던 레코드를 모두 새로운 페이지로 이동 시킨 후 변경데이터를 적용한다.

레코드의 실 저장 위치가 이렇게 바꾸지만 10번 홍길동을 가리키는 OID는 최소 저장 당시의 값을 유지한다. 위 그림의 예로 보면 홍길동의 OID2번 페이지의 1번 슬롯이 아닌, 1번 페이지의 1번 슬롯을 그대로 유지한다.

이러한 이유로 해당 레코드를 검색하면 처음에 저장되어 있던 페이지를 먼저 검색하고, 해당 레코드가 다른 페이지로 이동한 경우 이동한 페이지를 다시 읽어 데이터를 검색한다. , 하나의 래코드를 검색하기 위해 여러 개의 페이지를 읽어야 하므로 검색 속도가 떨어지게 된다.

테이블 재구성

위와 같이 링크로 연결된 레코드가 많아 지면 많아 질수록 검색을 위해 읽어야 할 페이지가 늘어남에 따라 검색에 미치는 영향이 커질 것이다. 이러한 경우 성능을 위해 테이블을 재구성하는 것이 좋다. 재구성 하는 방법은 다음과 같다.

cubrid compactdb 유틸리티 사용

cubrid compactdb 유틸리티는 데이터베이스 볼륨 중에 레코드 삭제, 변경 등으로 인해 사용되지 않고 있는 공간을 확보해준다.

오프라인 상태에서만 사용할 수 있으므로 DB서버를 내린 후에 작업하여야 한다.

사용방법은 아래와 같다.

$cubrid server stop db_name

$cubrid compactdb –v db_name

$cubrid server start db_name

cubrid unloaddb/loaddb 유틸리티 사용

cubrid unloaddb 유틸리티의 옵션 중 특정 테이블만 export 시키는 -i, --input-class-only 을 사용하여 데이터를 추출한 후 해당 테이블을 삭제하고, loaddb 유틸리티를 사용하여 복구 시킨다.

loaddb 유틸리티는 오프라인 상태에서만 사용이 가능하므로 DB서버를 내린 후에 작업하여야 한다.

사용방법은 아래와 같다.

$cubrid unloaddb -i list.txt –input-class-only db_name

$csql -u user_name -p password db_name

csql>drop table emp;

csql>;x

csql>;exit

$cubrid server stop db_name

$cubrid loaddb -u dba -p password -v -s db_name.schema db_name

$cubrid loaddb –u dba –p password -v -l -c 10000 -d db_name.objects db_name

$cubrid loaddb –u dba –p password -v -i db_name.indexes db_name

$cubrid server start db_name

위에서 소개한 각 유틸리티 사용법은 간략한 사용법으로 자세한 내용은 매뉴얼>관리자 안내서>데이터베이스 관리>사용 공간 확인 및 정리, 매뉴얼>관리자 안내서>데이터베이스 마이그레이션>데이터베이스 내보내기, 데이터베이스 가져오기 부분을 참고하기 바란다.

테이블 재생성

임시 테이블을 새로 만들어 데이터를 옮기고 기존 테이블을 삭제한 후 임시 테이블의 이름을 기존 테이블 이름으로 변경하는 방법이다.

csql>create table emp_t(no char(2), name varchar(10), add varchar(50));

csql>insert into emp_t select * from emp;

csql>drop table emp;

csql>rename table emp_t as emp;

참고 자료

·      CUBRID 힙 파일 관리자(http://dev.naver.com/projects/cubrid/documents/373)

·      알기 쉽게 해설한 오라클 SQL 튜닝 & 서버 튜닝

 


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
106 Linux CUBRID DB와 Broker 분리방안 정만영 2010.04.28 28412
» 기타 데이터 저장 구조와 테이블 재구성 file 손승일 2010.04.21 37490
104 기타 CUBRID 복제 구성하기 - 단일 서버에 구성 방법 포함 남재우 2010.03.08 30004
103 Windows 윈도우즈 환경에서 배치화일을 이용하여 백업 또는 데이터베이스 정리 수행하기 남재우 2010.03.03 27486
102 Linux CUBRID 복제 설계 가이드 file 정만영 2010.03.03 25139
101 Linux CUBRID 사용 포트와 iptables(방화벽) 설정 정만영 2010.03.01 38341
100 기타 자동증가 속성 사용 방법 및 주의 사항 남재우 2010.02.26 35684
99 기타 CUBRID 관련 유용한 기술 자료... 정병주 2010.02.19 33462
98 기타 Server HA 구성 시 CUBRID 설정과 방법 정만영 2010.02.03 21185
97 ODBC/OLEDB Vista_IIS_CUBRID_ASP연동 janus 2010.01.31 24553
96 Install CUBRID2008 R2.1 업그레이드시 serial 관련 문제 해결 방법 남재우 2010.01.28 27348
95 기타 CUBRID 데이터베이스와 연동하여 Qt어플리케이션 개발하기 - 2 3 김대진 2010.01.27 24541
94 기타 CUBRID 데이터베이스와 연동하여 Qt어플리케이션 개발하기 - 1 김대진 2010.01.14 32878
93 기타 CUBRID인덱스 구성 전략 웁쓰 2009.12.31 22193
92 기타 조인 방법(Join Method) 설명 file 웁쓰 2009.12.31 27994
91 기타 스칼라 서브쿼리 사용 가이드 웁쓰 2009.12.31 28274
90 Install CUBRID 에 텍스트큐브 설치하기 file inureyes 2009.12.31 29852
89 기타 예제로 배우는 CUBRID 스터디 문학청년 2009.12.29 18555
88 기타 독자적 테이블 사용되는 복제 재구성 file 손승일 2009.12.30 24173
87 Java SELECT ~ FOR UPDATE 대체 방법 손승일 2009.12.30 32377
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales