■ 인덱스 분석
  - 테이블에 대량으로 DML이 일어났을 때 분석함

SQL> analyze index [인덱스명] validate structure;

SQL> select (del_lf_rows_len / lf_rows_len) * 100 as balancing
   from index_stats;
위 쿼리에서 인덱스 밸런싱 값이 0에 가까울 수록 양호한 상태이다.


■ 인덱스 재구성
  - 일반적으로 인덱스 밸런싱이 20% 초과시 성능저하가 발생한 것으로 간주되기에 인덱스 재구성을 실시.
  - 리빌드 작업도 시간이 굉장히 오래 걸리고 과부하가 걸리는 것이라, 업무 이외 시간에 해줌.
SQL> alter index 인덱스명 rebuild [online];

SQL> analyze index 인덱스명 validate structure;
SQL> select (del_lf_rows_len / lf_rows_len) * 100 as bal
   from index_stats;
리빌드 후 인덱스 밸런싱 값을 조회해보면 양호한 상태로 되었음을 확인.
ONLINE : 리빌드 하는 동안에 인덱스를 사용하는 쿼리가 들어오면 해당 인덱스 사용 가능. 그러나 리빌드 하는 속도는 느림.


■ 인덱스 모니터링
  - 해당 인덱스가 실제로 시스템에서 사용되어지는 것인지 확인 시 사용.
  - 주의해야 할 것은 조회 시 used에 no로 나왔다 하더라도 해당 쿼리가 한달에 한번 도는 쿼리였다면 한달 후에 조회를 해야 하는 것이므로, 모든 것을 종합해 본 후 안쓰는 인덱스들의 삭제 조치를 고려해 보아야 한다.
SQL> alter index 인덱스명 monitoring usage;         // 모니터링 시작

SQL> select index_name, used
   from v$object_usage;                                       // used에 no라고 나오면 사용 안된 것임.

SQL> alter index 인덱스명 nomonitoring usage;     // 모니터링 해제

Posted by 겨울섬
,