Background Image
조회 수 37492 추천 수 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
번호 분류 제목 글쓴이 날짜 조회 수
46 기타 connect by 구현 방법 admin 2009.04.01 52375
45 Linux cron을 이용한 백업 자동화 admin 2009.04.01 33122
44 기타 csql(SQL 실행기) 사용법 1 admin 2008.11.21 26557
43 PHP cubrid_fetch_all 함수 추가하기 2 남재우 2009.06.16 20828
42 Windows eclipse에서 python 및 CUBRID broker_log_top 사용하기 cubebridge 2009.07.28 27272
41 CCI/DB API embedded sql 사용법 admin 2008.11.21 29734
40 Java iBATIS framework with CUBRID file 웁쓰 2009.05.19 54548
39 Java jsp용 jdbc 샘플입니다. file 시난 2009.05.25 47609
38 Java log4jdbc를 사용한 JDBC 로그 분석 시난 2009.07.02 36394
37 PHP phpize 를 이용한 PHP 모듈 설치 - LINUX file 남재우 2011.03.08 23090
36 PHP phpize를 이용한 PHP 모듈 연동 방법(CUBRID2008 R4.3 버전) file 이용미 2013.05.16 20858
35 기타 python 에서 broker_log_top 사용 1 admin 2009.04.01 17831
34 기타 select .. for update 처리를 위한 Stored Procudure 등록 및 사용법 남재우 2011.12.10 24872
33 Java tomcat8.0(DBCP2)과 CUBRID 연동하기 손승일 2016.07.01 15593
32 PHP windows 상에서 PHP 설치하기 file admin 2008.11.21 51804
31 Windows windows 환경에서 여러버젼의 CUBRID 설치하여 사용하기 4 남재우 2009.09.16 26193
30 Linux 가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 file 이경오 2015.07.14 13401
29 튜닝 다중컬럼 조건에 대한 인라인뷰 처리방안 2 박동윤 2016.12.27 6012
28 기타 대량의 데이터 입력 방법 admin 2008.11.21 32655
» 기타 데이터 저장 구조와 테이블 재구성 file 손승일 2010.04.21 37492
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