Background Image
조회 수 37491 추천 수 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
번호 분류 제목 글쓴이 날짜 조회 수
77 기타 자주 발생하는 큐브리드(cubrid) 에러 메시지 정리 admin 2011.07.14 81438
76 기타 [주의사항] CUBRID에서의 BLOB/CLOB 사용시 백업 및 복구에 대한 주의 점 admin 2011.07.14 52791
75 기타 connect by 구현 방법 admin 2009.04.01 52375
74 기타 오라클 개발자를 위한 CUBRID 개발 안내 1 admin 2009.04.01 49822
73 기타 CUBRID 활용 - 질의 튜닝 사례 중심 file cubrid 2010.12.02 45962
72 기타 CUBRID 개발 로드맵 admin 2008.12.27 40321
71 기타 MD5 암호화 모듈 file admin 2008.11.21 38593
» 기타 데이터 저장 구조와 테이블 재구성 file 손승일 2010.04.21 37491
69 기타 CUBRID와 타 데이터베이스 기능 비교 9 admin 2008.11.21 36163
68 기타 자동증가 속성 사용 방법 및 주의 사항 남재우 2010.02.26 35688
67 기타 CUBRID 2008 + XE 설치 가이드 [R1.x] Prototype 2009.03.13 34326
66 기타 CUBRID 관련 유용한 기술 자료... 정병주 2010.02.19 33462
65 기타 제로보드 XE 사용하기 file admin 2008.11.21 33069
64 기타 CUBRID 데이터베이스와 연동하여 Qt어플리케이션 개발하기 - 1 김대진 2010.01.14 32878
63 기타 대량의 데이터 입력 방법 admin 2008.11.21 32655
62 기타 CUBRID 매니저 R3.1에서 웹호스팅 서버의 CUBRID R2.1 접속하는 방법 (큐브리드 매니저에서 다른 버전의 큐브리드 서버 접속 방법) file admin 2011.07.14 31508
61 기타 CUBRID 2008 주요 명령어 admin 2008.11.21 30806
60 기타 CUBRID Migration Toolkit 튜토리얼 file cubrid 2010.10.22 30477
59 기타 CUBRID에서의 BLOB/CLOB 타입 사용법 cubebridge 2011.03.08 30453
58 기타 CUBRID 복제 구성하기 - 단일 서버에 구성 방법 포함 남재우 2010.03.08 30004
Board Pagination Prev 1 2 3 4 Next
/ 4

Contact Cubrid

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