본문 바로가기
DBMS/ORACLE

oracle index 사이즈 증가 테스트

by 드바 2022. 2. 16.

인덱스는 block을 재사용 하지 않고 계속 늘어난다는 이야기가 있어 테스트 함

 

DB 버전 : Oracle Database 19.3.0.0

요약 : 인덱스도 사용하지 않는 block 을 재사용 한다. 하지만 한번 늘어난 사이즈는 줄어들지 않아 rebuild 를 통해서만 축소 가능하다.

 

-- 시작 전 인덱스 사이즈 확인
SQL> SELECT owner, segment_name, segment_type, bytes/1024/1024 MB, blocks
FROM DBA_SEGMENTS 
WHERE owner = 'SK'
AND segment_name LIKE 'T1%'
;

OWNER    SEGMENT_NAME  SEGMENT_TYPE    MB   BLOCKS
---------- -------------------- ------------------ ---------- ----------
SK    T1 TABLE    12     1536
SK    T1_IX1 INDEX     5      640

SQL> DELETE FROM sk.t1 ;
72653 rows deleted.

SQL> COMMIT ;
Commit complete.

SQL> INSERT INTO sk.t1 SELECT * FROM DBA_OBJECTS ;
72655 rows created.

SQL> commit ;
Commit complete.

-- 사이즈 동일
SQL> SELECT owner, segment_name, segment_type, bytes/1024/1024 MB, blocks
FROM DBA_SEGMENTS 
WHERE owner = 'SK'
AND segment_name LIKE 'T1%'
;
OWNER    SEGMENT_NAME  SEGMENT_TYPE    MB   BLOCKS
---------- -------------------- ------------------ ---------- ----------
SK    T1 TABLE    12     1536
SK    T1_IX1 INDEX     5      640

SQL> 
SQL> DELETE FROM sk.t1 ;
72655 rows deleted.

SQL> INSERT INTO sk.t1 SELECT * FROM DBA_OBJECTS ;
72655 rows created.

SQL> COMMIT ;
Commit complete.

-- 사이즈 늘어남
SQL> SELECT owner, segment_name, segment_type, bytes/1024/1024 MB, blocks
FROM DBA_SEGMENTS 
WHERE owner = 'SK'
AND segment_name LIKE 'T1%'
;
  2    3    4    5  
OWNER    SEGMENT_NAME  SEGMENT_TYPE    MB   BLOCKS
---------- -------------------- ------------------ ---------- ----------
SK    T1 TABLE    12     1536
SK    T1_IX1 INDEX    10     1280

SQL>

 

## 인덱스 사이즈 증가의 여러 케이스

아래와 같은 세 가지 유형의 작업이 있다. 세가지 케이스 모두 최종 결과는 10,000 건

(모든 DML 사이에 commit 수행)

-- case 1

insert(10,000)

delete(5,000)

delete(5,000)

insert(10,000)

 

-- case 2

insert(10,000)

delete(5,000)

insert(10,000)

delete(5,000)

 

-- case 3

insert(10,000)

insert(10,000)

delete(5,000)

delete(5,000)

 

최종 데이터는 모두 10,000건이지만,

차지하는 공간은 10,000 : 15,000 : 20,000 이다.

Index의 크기는 일단 커지고 나면 다시는 줄지 않기 때문이다. (rebuild 수행 줄어듬)

댓글