Oracle/기타2009. 12. 2. 10:28
● 인덱스의 특성

   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
Posted by 자수성가한 부자