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 튜닝 & 서버 튜닝

 


  1. CUBRID 2008 R4.0 GA 버전의 주요 기능만 요약한 PPT 문서

  2. CUBRID 2008 R4.0 파라미터 변경 사항 (일부)

  3. CUBRID 볼륨 공간 재사용률 비교 - 2008 R3.1 vs. 2008 R4.0

  4. SNS 유형 서비스에서 CUBRID와 MySQL 조회 성능 비교

  5. CUBRID 2008 R4.0의 커버링 인덱스(covering index)는 무엇인가?

  6. [질의튜닝]order by desc가 인덱스 타게 하려면

  7. CUBRID 세미나 자료(개요 및 SQL 활용)

  8. apache, php rpm package 생성 시 필요한 rpm 스펙

  9. CUBRID Windows버전 삭제 및 재설치 실패시 강제 삭제하는 방법입니다.

  10. MySQL,PHP 기반에서 CUBRID,PHP 기반으로 포팅하기(CUBRID 2008 R3.1)

  11. phpize 를 이용한 PHP 모듈 설치 - LINUX

  12. apache, PHP 설치하기 - LINUX

  13. CUBRID에서의 BLOB/CLOB 타입 사용법

  14. CUBRID 설치 안내 - LINUX

  15. 데이터베이스 생성하기

  16. CUBRID 활용 - 질의 튜닝 사례 중심

  17. CUBRID Migration Toolkit 튜토리얼

  18. CUBRID 2008 R3.0 추가기능

  19. 트랜잭션과 LOCK 초급과정

  20. IIS에서 PHP, CUBRID 사용하기

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