Background Image
조회 수 37493 추천 수 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 Java SQuirreL SQL Client에서 CUBRID 사용하기 3 Prototype 2009.04.18 34535
105 튜닝 SNS 유형 서비스에서 CUBRID와 MySQL 조회 성능 비교 file admin 2011.07.14 21188
104 Java SELECT ~ FOR UPDATE 대체 방법 손승일 2009.12.30 32381
103 Java QuantumDB Eclipse Plugin을 사용하여 CUBRID연동하기 2 cubebridge 2009.10.06 28922
102 ODBC/OLEDB QTADO를 이용하여 CUBRID접속하기 file cubebridge 2009.12.10 21490
101 기타 PyCharm을 이용한 CUBRID, Django 연동 가이드 file 진우진 2016.04.11 8157
100 Java Power*Architect 에서 CUBRID 사용하기 Prototype 2009.04.18 23880
99 기타 Oracle의 SYS_CONNECT_BY_PATH 함수 흉내내기 CUBRID_DEV 2009.06.15 26530
98 ODBC/OLEDB ODBC드라이버를 이용한 2개 이상의 Statement 사용방법. file seongjoon 2009.07.02 23645
97 PHP MySQL,PHP 기반에서 CUBRID,PHP 기반으로 포팅하기(CUBRID 2008 R3.1) 손승일 2011.03.30 24446
96 PHP MySQL,PHP 기반에서 CUBRID,PHP 기반으로 포팅하기 시난 2009.07.02 32190
95 기타 MD5 암호화 모듈 file admin 2008.11.21 38596
94 PHP LINUX에서 PHP 사용하기 - phpize를 이용한 설치 1 admin 2008.11.21 37461
93 PHP LINUX에서 PHP 사용하기 file admin 2008.11.21 42495
92 Install LINUX CUBRID 4.0 매니저 설치방법 file 정만영 2011.07.19 23654
91 튜닝 LIMIT절을 사용하여 SQL문을 간결하게 작성하고, 부분범위 처리를 유도하자. 권호일 2016.06.29 15525
90 Java JavaSP SampleCode(Pivot기능) cubebridge 2009.07.28 27555
89 Java JDBC를 사용한 다중화 구성 SELECT Query 부하 분산 가이드 file 윤준수 2017.03.30 3955
88 PHP IIS에서 PHP, CUBRID 사용하기 file 남재우 2010.04.19 30311
87 Linux HP-UX에서 CUBRID 사용을 위한 kernel 설정값 조정 1 admin 2009.04.01 54155
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