[구로/가산,오라클인덱스모니터링기능,ORACLE INDEX강좌교육]Oracle의 monitoring index 기능을 이용하면 사용되고 있지 않은 인덱스를 확인 할 수 있습니다.SQL/ORACLE/교육/학원
절차는 다음과 같습니다.
1. index usage 통계 이용
2. index usage 통계치는 쿼리에 대한 parsing이 일어날 때 확인
3. turn on index monitor
4. index monitor를 turn on/off 한다는 것은 이미 사용중인 cursor를 invalidate 상태로 만들어 다시 컴파일하는 과정이 필요하므로 가급적 데이터베이스에 대한 작업이 적을 때 하는 것이 바람직합니다.
[예]
SQL> conn scott/tiger
연결되었습니다.
SQL> select table_name, index_name, monitoring, used,
2 start_monitoring, end_monitoring
3 from v$object_usage;
선택된 레코드가 없습니다.
SQL> create index idx_myemp_sal on myemp(sal);
인덱스가 생성되었습니다.
SQL> create index idx_myemp_ename on myemp(ename);
인덱스가 생성되었습니다.
SQL> alter index idx_myemp_sal monitoring usage;
인덱스가 변경되었습니다.
SQL> alter index idx_myemp_ename monitoring usage;
인덱스가 변경되었습니다.
SQL> select table_name, index_name, monitoring, used,
2 start_monitoring, end_monitoring
3 from v$object_usage;
TABLE_NAME INDEX_NAME MON USE
------------------------------ ------------------------------ --- ---
START_MONITORING END_MONITORING
------------------- -------------------
MYEMP IDX_MYEMP_ENAME YES NO
03/01/2005 23:17:14
MYEMP IDX_MYEMP_SAL YES NO
03/01/2005 23:17:00
SQL>set autotrace on; e 이 부분은 tuning 강좌를 참고하여 확인 바랍니다.
SQL> select sum(sal) from myemp
2 where job = 'SALEMAN'
3 and sal > 15000;
SUM(SAL)
----------
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'MYEMP'
3 2 INDEX (RANGE SCAN) OF 'IDX_MYEMP_SAL' (NON-UNIQUE)
Statistics
----------------------------------------------------------
144 recursive calls
3 db block gets
383 consistent gets
236 physical reads
580 redo size
381 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
4 sorts (memory)
0 sorts (disk)
1 rows processed
-- IDX_MYEMP_SAL인덱스는 사용되었으므로 USED가 YES로 바뀌어 있습니다.
SQL> select table_name, index_name, monitoring, used,
2 start_monitoring, end_monitoring
3 from v$object_usage;
TABLE_NAME INDEX_NAME MON USE
------------------------------ ------------------------------ --- ---
START_MONITORING END_MONITORING
------------------- -------------------
MYEMP IDX_MYEMP_ENAME YES NO
03/01/2005 23:17:14
MYEMP IDX_MYEMP_SAL YES YES
03/01/2005 23:17:00
SQL> alter index IDX_MYEMP_ENAME nomonitoring usage;
인덱스가 변경되었습니다.
SQL> alter index IDX_MYEMP_SAL nomonitoring usage;
인덱스가 변경되었습니다.
- 모니터링이 종료 되더라도 이전의 기록은 없어지지 않고 남아 있습니다.
SQL> select table_name, index_name, monitoring, used,
2 start_monitoring, end_monitoring
3 from v$object_usage;
TABLE_NAME INDEX_NAME MON USE
------------------------------ ------------------------------ --- ---
START_MONITORING END_MONITORING
------------------- -------------------
MYEMP IDX_MYEMP_ENAME NO NO
03/01/2005 23:17:14 03/01/2005 23:21:09
MYEMP IDX_MYEMP_SAL NO YES
03/01/2005 23:17:00 03/01/2005 23:21:20
댓글 없음:
댓글 쓰기