● 인덱스의 특성
1. 삭제된 key공간은 다음번 insert에 재활용
2. delete된 공간은 다음번 split시에 재활용
● 인덱스의 크기가 문제되는 상황
1. 여유 공간은 있지만 내 공간은 없다.
2. 동일 transaction내에서는 삭제된 공간을 재활용하지 못한다.
3. 한번 늘어난 공간은 절대로 저절로 늘어나지 않는다.
4. transaction이 rollback되어도 늘어난 공간은 줄어들지 않는다.
- 테이블과 index공간 둘 다
- 다음번 insert시에는 재활용된다.
5. 여유공간은 많지만 dead block이 없는 경우(fragmentation)
- index rebuild : alive block만 모아서 새롭게 index를 생성하고 기존의 index삭제
6. 삭제 후의 dead block이 즉각 재활용되지 못하기도 한다.
- index coalesce : 키 병합 -> leaf node의 chain 정리(주소값이 바뀜), 공간의 회수
※ 위의 상황들을 어떻게 검증할까??
● 인덱스 SPLIT
◎ 의미
: 인덱스가 자란다.
리프블럭이 꽉차면 새로운 리프 블럭을 추가하고 key를 옮긴다.(50:50 또는 90:10)
◎ 특징
- 고비용의 작업
- 많은 양의 redo유발
- physical i/o유발
- tx lock경합
- 50:50 스플릿, 90:10 스플릿이 존재
- 관련 뷰 : v$sysstat
◎ 인덱스 SPLIT을 줄이기 위한 대책(대체로 큰 효과없고, 부작용 발생 가능)
- 동시 session수를 줄인다.
- 불필요한 index삭제
- index생성시에 높은 pctfree 부여
- reverse index 생성
참조 : index 크기문제 part1
index 크기문제 part2
index 크기문제 part3
1. 삭제된 key공간은 다음번 insert에 재활용
2. delete된 공간은 다음번 split시에 재활용
● 인덱스의 크기가 문제되는 상황
1. 여유 공간은 있지만 내 공간은 없다.
2. 동일 transaction내에서는 삭제된 공간을 재활용하지 못한다.
3. 한번 늘어난 공간은 절대로 저절로 늘어나지 않는다.
4. transaction이 rollback되어도 늘어난 공간은 줄어들지 않는다.
- 테이블과 index공간 둘 다
- 다음번 insert시에는 재활용된다.
5. 여유공간은 많지만 dead block이 없는 경우(fragmentation)
- index rebuild : alive block만 모아서 새롭게 index를 생성하고 기존의 index삭제
6. 삭제 후의 dead block이 즉각 재활용되지 못하기도 한다.
- index coalesce : 키 병합 -> leaf node의 chain 정리(주소값이 바뀜), 공간의 회수
※ 위의 상황들을 어떻게 검증할까??
● 인덱스 SPLIT
◎ 의미
: 인덱스가 자란다.
리프블럭이 꽉차면 새로운 리프 블럭을 추가하고 key를 옮긴다.(50:50 또는 90:10)
◎ 특징
- 고비용의 작업
- 많은 양의 redo유발
- physical i/o유발
- tx lock경합
- 50:50 스플릿, 90:10 스플릿이 존재
- 관련 뷰 : v$sysstat
◎ 인덱스 SPLIT을 줄이기 위한 대책(대체로 큰 효과없고, 부작용 발생 가능)
- 동시 session수를 줄인다.
- 불필요한 index삭제
- index생성시에 높은 pctfree 부여
- reverse index 생성
참조 : index 크기문제 part1
index 크기문제 part2
index 크기문제 part3
'Oracle > 기타' 카테고리의 다른 글
login.sql셋팅 (0) | 2009.12.15 |
---|---|
DBMS_STATS package (0) | 2009.12.08 |
SQL*PLUS에서 HTML, EXCEL 출력물 만들기 (0) | 2009.11.18 |
Oracle hint (0) | 2009.11.18 |
ROWNUM (2) | 2009.11.17 |