인덱스는 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 수행 시 줄어듬)
'DBMS > ORACLE' 카테고리의 다른 글
APPEND 사용 시 logging / nologging 에 따른 로그 사용량 변화 (0) | 2022.02.27 |
---|---|
테이블 조회 시 다른 세션에서도 uncommit block 을 읽을까? (0) | 2022.02.25 |
ORA-1653 테이블스페이스 여유 공간 있는데 INSERT 실패 (0) | 2022.02.16 |
ORACLE EOS 확인 (0) | 2022.02.16 |
oracle 테이블 변경(alter table) 후 트리거 invalid 상태 변화 (0) | 2022.02.16 |
댓글