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

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

 1.  개요
CUBRID 2008 R3.1 대비 2008 R4.0 의 큰 개선 사항 중 하나로 데이터베이스 볼륨 공간의 사용 효율이 높아진 점을 들 수 있다. 본 문서는 버전 간 비교 시험을 통해 삽입/삭제가 반복되는 환경에서 공간 재사용률이 어느 정도 향상되었는지를 확인하고자 하였다.

 

2.  시험 방법
 2.1.  사용 버전
   2008 R3.1 patch2 (8.3.1.2003), 문서에서 2008 R3.1로 표기한 것은 전부 이 버전에 해당한다.

   2008 R4.0 (8.4.0.0228), 문서에서 2008 R4.0로 표기한 것은 전부 이 버전에 해당한다.

 

 2.2.  데이터베이스 구성
  256MB의 일반(generic) 볼륨을 16K 크기의 page로 구성한다.

  테이블 및 데이터 입력은 다음과 같이 한다.

  create table tbl1 (

        i int primary key,

        c varchar(100)

  );

  insert into tbl1 values(?,'12345678901234567890123456789012345678901234567890')

 

  2.3.  시험 시나리오
  시나리오는 다음과 같은 사용 환경을 가정하고 이를 확인하고자 하였다.

 

 시나리오 1)은 매일 중간 데이터를 생성하는 테이블이 있다고 가정하고, 이러한 테이블에 데이터를 입력/삭제하는

                 과정이 반복된다고 할 때 데이터를 DELETE하는 것과 테이블을 DROP하는 것 중 어느 것이 공간 재사용률이

                 높은가를 확인하고자 하는 시험이다.

 시나리오 2)는 매일 최근 일정 기간의 로그 데이터만 유지하고자 하여 새로 데이터가 입력되면 가장 오래된 데이터

                 먼저 삭제해 나간다는 가정 하에, 공간 재사용률이 어느 정도 되는가를 확인하고자 하는 시험이다.

                 데이터량과 입력/삭제 횟수의 차이에 따라

                 추이가 달라지는지를 확인하고자 하였다.

 시나리오 3)은 REUSE_OID를 사용한 테이블과 일반 테이블과의 공간 재사용률 차이를 비교하고자 한 시험이다.

                 OID는 물리적 위치 정보로 표현되는 객체 식별자로서, 객체의 참조 관계를 관리하고, 객체 조회/저장/삭제를

                 수행한다. OID를 이용하면 테이블 참조 없이 해당 오브젝트에 직접 접근할 수 있지만, 객체가 삭제되더라도

                 참조 관계를 유지하기 위해 해당 객체의 OID를

                 보존하므로 재사용률이 저하될 수 있다. REUSE_OID 테이블은 테이블 내 객체들의 OID값을 조회할 수 없다.

 

  시나리오 1) 1만건 데이터의 INSERT/DELETE와 INSERT/DROP/CREATE를 반복하여 공간 재사용률 비교

               1.1) INSERT/DELETE를 10회 반복

               1.2) INSERT/DROP/CREATE를 10회 반복

 

  시나리오 2) 초기 데이터 INSERT 후 추가로 INSERT/DELETE를 반복하여 공간 재사용률 비교

                    (이때 DELETE는 가장 오래된 것부터 삭제)

               2.1) 10만건 데이터 INSERT 후 1만건 데이터의 INSERT/DELETE를 10회 반복

               2.2) 100만건 데이터를 INSERT 후 1만건 데이터의 INSERT/DELETE를 100회 반복

               2.3) 100만건 데이터 INSERT 후 10만건 데이터의 INSERT/DELETE를 10회 반복

               2.4) 300만건 데이터 INSERT 후 30만건 데이터의 INSERT/DELETE를 10회 반복

 

  시나리오 3) 테이블을 REUSE_OID로 생성하여 INSERT/DELETE와 INSERT/DROP/CREATE의 공간 재사용률 각각 비교

                   (이때 DELETE는 가장 오래된 것부터 삭제)

               3.1) 1만건 데이터의 INSERT/DELETE 10회 반복하여 시나리오 1.1)과 비교

               3.2) 1만건 데이터의 INSERT/DROP/CREATE 10회 반복하여 시나리오 1.2)와 비교

               3.3) 초기 100만건 데이터를 INSERT 후 1만건 데이터의 INSERT/DELETE를 100회 반복하여

                     시나리오 2.2)와 비교

 

3.  시험 결과
 데이터의 INSERT/DELETE 후 사용량의 증가분으로 데이터 삭제 후 얼만큼의 용량이 재사용되지 못하였는지를 확인할 수 있으므로, 매회 INSERT/DELETE 시 데이터베이스 볼륨 증가분 평균을 확인하여 다음과 같은 결과를 도출하였다. 같은 레코드 수의 삽입/삭제 후 존재하는 볼륨 증가분은 그만큼의 공간이 낭비된다는 의미로 해석하였다. 바꿔 말하면 같은 레코드 수에 대해 (입력 시 사용 공간 – 삭제 후 남은 공간) = (재사용된 공간)으로 볼 수 있다.

* 실험에서 첫 회의 INSERT/DELETE 시에는 공간 재사용이 발생하지 않으므로 아래 표의 평균 계산 시 첫 회는 제외 하였다.

 

시나리오 1)에 대하여

1.1)과 1.2) 중 어느 방식이 공간 재사용률이 더 높은지를 비교하면 다음과 같다. 2008 R3.1 에서는 INSERT/DELETE 방식 대비 INSERT/DROP/CREATE 방식의 공간 재사용률 증가분이 5.7% 정도 더 높다고 할 수 있으나, 2008 R4.0 에서는 두 방식 간 공간 재사용률의 차이가 없다.

(공간 재사용률) = (1만건 삭제 시 재사용되는 용량)/ (1만건 삽입 시 사용되는 용량)

(1만건 삭제 시 재사용되는 용량) = (1만건 삽입 시 사용되는 용량) – (1만건 삭제 시 남은 용량)

 

 

2008 R3.1

2008 R4.0

 데이터 초기화 후 1만건 INSERT 10회 평균 사용량 : a

1.91 MB

0.98 MB

 1.1) 데이터 초기화 후 1만건 INSERT /DELETE 9회 평균 사용량 : b

0.33 MB

0.03 MB

 1.2) 데이터 초기화 후 1만건 INSERT/DROP/CREATE 9회 평균 사용량 : c

0.24 MB

0.03MB

 (재사용되지 못한 공간)

 1.1) 대비 1.2)의 공간 재사용률 : d

5.70%

0%

              계산식: d = ( (a - c) / (a - b) - 1 ) * 100

 

1_1_bin97123.png   1_2_bin97123.png

1.1) 1만건 INSERT/DELETE 10회 볼륨 사용량

1.2)1만건 INSERT/DROP 10회 볼륨 사용량

* 가로축: 실행 횟수

      * 세로축: 볼륨 용량 (MB)

 

위 그래프에서 첫 1회 이후의 증가된 사용량은 재사용되지 못한 공간이라고 볼 수 있다. 그래프의 추이를 보아 2008 R3.1 에서는 회를 거듭할수록 INSERT/DROP 방식이 볼륨 사용량이 작아지는 것으로 보인다. , 재사용률이 높아진다고 볼 수 있다. 그러나 2008 R4.0 에서는 두 방법 간에 재사용률의 차이가 없어 보인다.

시나리오 1.1), 즉 삽입한 데이터를 바로 삭제하는 경우의 공간 재사용률을 각 버전 별로 살펴보면 다음과 같다. 2008 R3.1 은 재사용된 공간이 약 82.72%이나, 2008 R4.0 는 약 96.94%이다.

 

2008 R3.1

2008 R4.0 

 데이터 초기화 후 1만건 INSERT 10회 평균 사용량 : a

1.91 MB

0.98MB

 1.1) 데이터 초기화 후 1만건 INSERT/DELETE 9회 평균 사용량 : b

0.33 MB

 0.03 MB

 (재사용되지 못한 공간)

 공간 재사용률 : c

약 82.72%

약 96.94%

 

시나리오 2)에 대하여

 초기 데이터 입력 후 추가로 입력/삭제를 하는데, 입력된 데이터에서 가장 오래된 데이터부터 삭제해 나가는 경우 볼륨 공간 재사용률을 각 버전 별로 살펴보면 다음과 같다.

 

 먼저 시나리오 1.1)과 시나리오 2.1)의 차이를 보면, 1.1) INSERT/DELETE ALL을 반복 수행하는 시험이고 2.1)는 일정량의 데이터가 INSERT된 상태에서 INSERT/가장 오래된 데이터 DELETE를 반복하는 시험이다.

 

 2008 R3.1 에서 시나리오 2.1)의 공간 재사용률이 58.64%로 시나리오 1.1) 82.72%에 비해 로 무려 24.08%를 재사용하지 못하지만, 2008 R4.0 96.94%, 95.92%로 거의 차이가 없다. , 2008 R4.0에서는 데이터를 전부 삭제 후 입력하는 경우와 일부 삭제 후 입력하는 경우 모두 공간 재사용률이 비슷하다고 할 수 있다.

 

 또한, 2.2), 2.3), 2.4)의 시험 결과에서는 입력/삭제 레코드 개수와 데이터량이 늘어날수록 재사용률이 조금씩 낮아지는 것으로 보인다.

 

2.1) 초기 10만건 INSERT 1만건 데이터의 INSERT/DELETE 10회 시 공간 재사용률

 

2008 R3.1

2008 R4.0 

 데이터 초기화 후 1만건 INSERT 10회 평균 사용량 : a

1.91 MB

0.98 MB

 추가로 1만건 INSERT/DELETE 9회 평균 사용량 : b 

0.79MB

 0.04MB

 (재사용되지 못한 공간)

 공간 재사용률 : c

약 58.64%

약 95.92%

                계산식: c = (a-b)/a * 100 

 

 

2.2) 초기 100만건 INSERT 1만건 데이터의 INSERT/DELETE 100회 시 공간 재사용률

 

2008 R3.1 

2008 R4.0 

 데이터 초기화 후 1만건 100회 평균 사용량 : a

1.91 MB

0.97 MB

 추가로 1만건 INSERT/DELETE 99회 평균 사용량 : b

0.95MB

 0.06MB

 (재사용되지 못한 공간)

 공간 재사용률 : c

약 50.26%

약 93.81%

                   계산식: c = (a-b)/a * 100

 

 

2.3) 초기 100만건 INSERT 10만건 데이터의 INSERT/DELETE 10회 시 공간 재사용률

 

2008 R3.1 

2008 R4.0 

 데이터 초기화 후 10만건 10회 평균 사용량 : a

19.14 MB

9.76 MB

 추가로 10만건 INSERT/DELETE 9회 평균 사용량 : b

9.57MB

 0.42MB

 (재사용되지 못한 공간)

 공간 재사용률 : c

약 50.00%

약 95.70%

                   계산식: c = (a-b)/a * 100

 

 

2.4) 초기 300만건 INSERT 30만건 데이터의 INSERT/DELETE 10회 시 공간 재사용률

 

2008 R3.1 

2008 R4.0 

 데이터 초기화 후 30만건 10회 평균 사용량 : a

57.42 MB

29.29 MB

 추가로 30만건 INSERT/DELETE 9회 평균 사용량 : b

28.89MB

 1.27MB

 (재사용되지 못한 공간)

 공간 재사용률 : c

약 49.69%

약 95.66%

                   계산식: c = (a-b)/a * 100

 

 

2_1_bin97123.png            2_2_bin97123.png

       2.1) 초기 10만건 INSERT 1만건 INSERT/DELETE 사용량                2.2) 초기 100만건 INSERT 1만건 INSERT/DELETE

              10회 볼륨 사용량                                                                               100회 볼륨 사용량 

2_3_bin97123.png             2_4_bin97123.png

2.3) 초기 100만건 INSERT 10만건 INSERT/DELETE

      10회 볼륨 사용량

     2.4) 초기 300만건 INSERT 30만건 INSERT/DELETE

           10회 볼륨 사용량

  * 가로축: 실행 횟수

  * 세로축: 볼륨 용량 (MB)

 

 

시나리오 3)에 대하여

 

 INSERT/DELETE에 대해서는 3.1) 1.1)을 비교하고, INSERT/DROP/CREATE에 대해서는 3.2) 1.2)를 비교하며, 초기 INSERT 후 가장 오래된 것부터 DELETE에 대해서는3.3)2.2)를 비교하여 REUSE_OID를 사용할 때와 그렇지 않을 때의 공간 재사용률이 어떻게 다른지를 살펴보면 다음과 같다.

 

 3.1) 1.1) 비교를 통한 INSERT/DELETE 시험에서는 REUSE_OID 테이블이 일반 테이블보다 공간 재사용률이 높게 나타난 것을 알 수 있다. 2008 R3.1에서는 82.72%에서 95.81% 13% 정도 높아졌으며, 2008 R4.0에서는 100%의 공간 재사용률을 보여주었다.

 

 3.2) 1.2) 비교를 통한 INSERT/DROP/CREATE 시험에서는 REUSE_OID 테이블이 일반 테이블보다 공간 재사용률이 월등히 높게 나타난 것을 알 수 있다. REUSE_OID 테이블을 사용하는 시험의 그래프 추이를 보면 2008 R3.1에서는 5회 이후부터 공간 재사용률이 100%에 이르며, 2008 R4.0에서는 처음부터 공간 재사용률이 100%를 보여주었다.

 

 그러나 3.3) 2.2) 비교를 통한 INSERT/DELETE 시험에서는 REUSE_OID 테이블과 일반 테이블의 차이가 거의 나타나지 않았다. 2008 R3.1에서는 1만건을 100회 반복했을 때 약 2MB 정도를 덜 사용하였으며, 2008 R4.0에서는 전혀 차이가 없었다.

 

 

3.1) REUSE_OID 테이블 1만건 데이터의 INSERT/DELETE 10회 시 공간 재사용률

 

2008 R3.1 

2008 R4.0 

 테이블 생성 시 REUSE_OID 옵션 사용 여부

미사용

사용

미사용

사용

 1만건 10회 평균 사용량 : a

1.91 MB

1.91MB

0.98 MB

0.98 MB

 1만건 INSERT/DELETE 9회 평균 사용량 : b

0.33MB

 0.08MB

 0.03MB

 0MB

 (재사용되지 못한 공간)

 공간 재사용률 : c

약 82.72%

약 95.81%

약 96.94%

100%  

                     계산식: c = (a-b)/a * 100

 

1_1_bin97123.png   3_1_bin97123.png

1.1)1만건 INSERT/DELETE 10회 볼륨 사용량

3.1) REUSE_OID 테이블 1만건 INSERT/DELETE

     10회 볼륨 사용량

가로축: 실행 횟수

* 세로축: 볼륨 용량 (MB)

 

 

3.2) REUSE_OID 테이블 1만건 데이터의 INSERT/DROP/CREATE 10회 시 공간 재사용률  

 

2008 R3.1 

2008 R4.0 

 테이블 생성 시 REUSE_OID 옵션 사용 여부

미사용

사용

미사용

사용

 1만건 10회 평균 사용량 : a

1.91 MB

1.91MB

0.98 MB

0.98 MB

 1만건 INSERT/DELETE 9회 평균 사용량 : b

0.24MB

 0.16MB

 0.03MB

 0MB

 (재사용되지 못한 공간)

 공간 재사용률 : c

약 87.43%

약 91.62%

약 96.94%

100%  

               계산식: c = (a-b)/a * 100

 

 

1_2_bin97123.png     3_2_bin97123.png

 

1.2)1만건 INSERT/DROP 10회 볼륨 사용량

3.2) REUSE_OID 테이블 1만건 INSERT/DROP

    10회 볼륨 사용량

 

 

3.3) REUSE_OID 테이블에 초기 100만건 INSERT 1만건 데이터의 INSERT/DELETE 100회 시 공간 재사용률

           (DELETE는 가장 오래된 것부터 삭제)

 

2008 R3.1 

2008 R4.0 

 테이블 생성 시 REUSE_OID 옵션

미사용

사용

미사용

사용

 데이터 초기화 후 1만건 100회 평균 사용량 : a

1.91 MB

1.91MB

0.97 MB

0.97MB

 추가로 1만건 INSERT/DELETE 99회 평균 사용량 : b

0.95MB

 0.93MB

 0.06MB

 0.06MB

 (재사용되지 못한 공간)

 공간 재사용률 : c

약 50.26%

약 51.31%

약 93.81%

약 93.81%  

       계산식: c = (a-b)/a * 100

 

2_2_bin97123.png       3_3_bin97123.png

2.2) 초기 100만건 INSERT 1만건 INSERT/DELETE

      100회 볼륨 사용량

 

3.3) REUSE_OID 테이블 초기 100만건 INSERT

     1만건 INSERT/DELETE 100회 볼륨 사용량

 

* 가로축: 실행 횟수

* 세로축: 볼륨 용량 (MB)

 

 

4. 결론

 

 2008 R3.1에서는 같은 레코드 수의 INSERT/DELETE에 대해 공간 재사용률이 대략 50% 전후이나, 공간 재사용 방식의 개선으로 2008 R4,0에서는 약 95% 전후로 높아졌다. , 같은 양의 데이터를 삽입/삭제하는 환경에서 2008 R3.1 50%정도를, 2008 R4.0 에서는 5% 정도를 재사용하지 못한다.

 

 REUSE_OID 테이블의 경우 INSERT/DELETE ALL 시험과 INSERT/DROP 시험에서 공간 재사용률이 높게 나타났으며 특히 INSERT/DROP 시험은 일정 회수 이후부터 100%의 공간 재사용률을 보여주었다. 특히 2008 R4.0에서는 두 시험 모두 공간 재사용률 100%를 보여주었다.

 

 INSERT 후 가장 오래된 것부터 DELETE하는 시험에서는 2008 R3.1에서는 일반 테이블보다 REUSE_OID 테이블에서 공간 재사용률이 조금 높게 나타났고, 2008 R4.0에서는 두 경우 모두 공간 재사용률의 차이가 없었다.

 

 

 이는 위의 시험에 제한된 결과이지만, 일반적으로 삽입/삭제 회수가 많아질수록 공간 재사용률은 조금씩 낮아질 것으로 예상된다.

 

5. 참고

         5.1. 시험 환경

 

            사용 OS: Linux (Cent OS 5.3)

             버전 및 데이터베이스 생성

  CUBRID 버전

 데이터베이스 생성 명령어 (볼륨 크기 256MB, 페이지 크기 16K )

 2008 R3.1 Patch2(8.3.1.2003)
  (본문에서는 2008 R3.1로 표현함)

 cubrid createdb -p 16384 --page-size=16384 testdb

 2008 R4.0 GA(8.4.0.0228)
  (본문에서는 2008 R4.0으로 표현함)

 cubrid createdb --db-volume-size=256M --db-page-size=16K testdb

 
        5.2 데이터 측정 방법

     매 회마다 cubrid spacedb 에서 출력되는 결과를 확인: total_size – free_size로 사용량 측정

 

           예1: 시나리오 1.1) 아래 사항을 10회 반복

  insert into tbl1 values(1,'12345678901234567890123456789012345678901234567890') ;
  insert into tbl1 values(2,'12345678901234567890123456789012345678901234567890') ;
   …
  insert into tbl1 values(10000,'12345678901234567890123456789012345678901234567890') ;
  delete from tbl1;
  cubrid spacedb : total_size – free_size로 사용량 측정

 

      예2: 시나리오 2.1) 초기 10만건 insert 1만건 insert/가장 오래된 1만건 delete 10회 반복

  insert into tbl1 values(1,'12345678901234567890123456789012345678901234567890') ;
  insert into tbl1 values(2,'12345678901234567890123456789012345678901234567890') ;
  …
  insert into tbl1 values(100000,'12345678901234567890123456789012345678901234567890') ;
  insert into tbl1 values(100001,'12345678901234567890123456789012345678901234567890') ;
  …
  insert into tbl1 values(110000,'12345678901234567890123456789012345678901234567890') ;
  delete from tbl1 where i between 1 and 10000
  cubrid spacedb : total_size – free_size로 사용량 측정
  insert into tbl1 values(110001,'12345678901234567890123456789012345678901234567890') ;
  …
  insert into tbl1 values(120000,'12345678901234567890123456789012345678901234567890') ;
  delete from tbl1 where i between 10001 and 20000
  cubrid spacedb : total_size – free_size로 사용량 측정
  insert into tbl1 values(190001,'12345678901234567890123456789012345678901234567890') ;
  …
  insert into tbl1 values(200000,'12345678901234567890123456789012345678901234567890') ;
  delete from tbl1 where i between 90001 and 100000
  cubrid spacedb : total_size – free_size로 사용량 측정


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
146 기타 CUBRID Migration방법(by unloaddb & loaddb) 주현 2015.07.01 21830
145 기타 콘솔에서 마이그레이션 하기. file 권호일 2015.06.19 13427
144 PHP CUBRID HA 환경에서 Apache-PHP 설정 가이드 이용미 2015.06.16 10661
143 기타 CUBRID isolation level & Dirty Read 정만영 2015.05.29 11310
142 Windows Windows 에 설치 된 JRE 설치 위치 확인 하기. file 성진 2015.05.28 12567
141 Java CUBRID와 MyBATIS 빠르게 연동하기 file 김승훈 2015.05.07 19123
140 Linux CUBRID Linux 부팅시 자동시작 서비스 설정 방법 정만영 2013.09.16 25454
139 PHP phpize를 이용한 PHP 모듈 연동 방법(CUBRID2008 R4.3 버전) file 이용미 2013.05.16 20853
138 PHP Apache, PHP 설치 방법 file 이용미 2013.05.16 41246
137 기타 HA 환경 구성 시 데이터 복제 지연이 발생하는 경우 ECHO(7) port를 확인하자. 손승일 2012.11.29 26440
136 ODBC/OLEDB VB에서 CUBRID ODBC/OLEDB 사용하는 방법 및 샘플코드. file seongjoon 2012.06.30 26917
135 Java CUBRID와 Oracle의 Clob 타입 사용 방법 비교. seongjoon 2012.06.30 54547
134 Install CUBRID기반으로 XE 운영하기 – 설치가이드 file cubebridge 2012.04.13 30929
133 기타 select .. for update 처리를 위한 Stored Procudure 등록 및 사용법 남재우 2011.12.10 24870
132 Install LINUX CUBRID 4.0 매니저 설치방법 file 정만영 2011.07.19 23653
131 Install CUBRID Ubuntu Launchpad Installation 방법 file 정만영 2011.07.19 29604
130 기타 자주 발생하는 큐브리드(cubrid) 에러 메시지 정리 admin 2011.07.14 81363
129 기타 [주의사항] CUBRID에서의 BLOB/CLOB 사용시 백업 및 복구에 대한 주의 점 admin 2011.07.14 52551
128 기타 CUBRID 매니저 R3.1에서 웹호스팅 서버의 CUBRID R2.1 접속하는 방법 (큐브리드 매니저에서 다른 버전의 큐브리드 서버 접속 방법) file admin 2011.07.14 31507
127 기타 동시 접속자에 따른 파라미터 설정 admin 2011.07.14 25680
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