왜 인덱스 크기가 계속 커지는가 - 삭제된 공간이 재활용됨에도 불구하고
오라클 2008.06.13 21:092007/12/24 - [Advanced Oracle] - [Oracle is Mad] Index Rebuild를 둘러싼 논쟁 - Part2
하지만, 이 내용을 세미나 시간에 이야기하면 항상 이 질문이 따라 온다.
삭제하고 데이터 추가하는 방식으로 사용하는데 Index 크기가 계속 커지던데요?
다음과 같은 두 가지 상황에서 이런 일이 발생한다.
1. Commit 하지 않는 Delete
아래와 같은 작업에서는 Index의 크기가 변하지 않는다. 삭제 후 추가 작업이기 때문이다.
commit;
insert into t1 select...; -- 5000 블록 추가
하지만, 아래와 같은 작업 시에는 Index의 크기가 추가된 데이터만큼 늘어난다.
insert into t1 select...; -- 5000 블록 추가
Oracle의 Transaction 관리 메커니즘은 위와 같은 경우 delete에 의해 확보된 Free Block이 Commit에 의해 확정되지 않은 상태에서는 Batch Insert에 의해 재사용되지 않도록 한다.
2. 작업 패턴 상의 문제
아래와 같은 세 가지 패턴의 작업이 있다. 세 패턴 모두 최종 결과는 10,000 건이다.
(모두 DML 사이에 Commit이 이루어진다고 가정한다)
-- Case1
insert(10,000)
delete(5,000)
delete(5,000)
insert(10,000)
-- Case2
insert(10,000)
delete(5,000)
insert(10,000)
delete(5,000)
-- Case3
insert(10,000)
insert(10,000)
delete(5,000)
delete(5,000)
비록 최종 데이터는 모두 10,000건이지만, 차지하는 공간은 10,000 : 15,000 : 20,000 이다. Index의 크기는 일단 커지고 나면 다시는 줄지 않기 때문이다. (Rebuild를 하지 않는 한)
위의 두 가지 사례가 반복적으로 작용하면 마치 Index의 공간이 다시는 재활용되지 않고 무한정 커지는 것으로 생각될 수 있다. Index 크기가 계속 증가하는 현상이 발생할 때는 위와 같은 상황에 해당하지 않는지 면밀하게 점검할 필요가 있을 것이다.
PS) 그 외에도 사례가 더 있을 수 있을 거 같다. 이 글을 읽고 많은 분들이 의견을 달았으면 좋겠다.
'오라클' 카테고리의 다른 글
Visual의 힘 (0) | 2008.06.20 |
---|---|
왜 내 PPT 자료는 엿같은가? (6) | 2008.06.17 |
왜 인덱스 크기가 계속 커지는가 - 삭제된 공간이 재활용됨에도 불구하고 (4) | 2008.06.13 |
[공지] 제5차 Orace is Mad(R) 세미나가 열립니다. (0) | 2008.06.10 |
Bitmap Index vs. Btree Index (5) | 2008.05.29 |