2013년 10월 15일 화요일

인덱스 모니터링 기능을 이용한 자주사용안하는 인덱스 찾기 Oracle의 monitoring index 기능을 이용하면 사용되고 있지 않은 인덱스를 확인 할 수 있습니다. 절차는 다음과 같습니다. 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 [출처] 오라클자바커뮤니티 - http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecOracle&wr_id=218 오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의) www.onjprogramming.co.kr [개강확정강좌]오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr) [주말] [10/26]C#,ASP.NET마스터 [10/27]JAVA&WEB프레임워크실무과정 [평일야간] [10/17]SQL초보에서실전전문가까지 [10/17]자바초보에서안드로이드까지 [주간] [10/21]Spring3.X, MyBatis, Hibernate실무과정 JAVA ORACLE iPhone/Android .NET 표준웹/HTML5 채용/취업무료교육 초보자(재학생)코스 SQL초보에서실전전문가까지 총 8일 56시간 10-15 SQL초보에서실전전문가까지 총 18일 54시간 10-17 PL/SQL,오라클힌트,SQL튜닝,사례연구 총 10일 30시간 10-25 PL/SQL,오라클힌트,SQL튜닝,사례연구 총 4일 32시간 10-19 SQL초보에서실전전문가까지 총 8일 56시간 11-10

인덱스 모니터링 기능을 이용한 자주사용안하는 인덱스 찾기 

Oracle의 monitoring index 기능을 이용하면 사용되고 있지 않은 인덱스를 확인 할 수 있습니다.
 
절차는 다음과 같습니다.
 
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

오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  


댓글 없음:

댓글 쓰기