A-A+
有关索引-查看某索引是否使用过
查看某索引是否使用过
创建测试表及索引
SQL> drop table yallonking; Table dropped. SQL> create table yallonking as select rownum id,'yallonking' name from dual connect by rownum<1000; Table created. SQL> create index idx_id on yallonking(id); Index created.
(一)通过对索引的监控来检查
SQL> alter index idx_id monitoring usage; Index altered. SQL> select index_name,monitoring,used from v$object_usage; INDEX_NAME MON USE ------------------------------ --- --- IDX_ID YES NO SQL> set autot traceonly SQL> select * from yallonking; 999 rows selected. Execution Plan ---------------------------------------------------------- Plan hash value: 2582482548 -------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 999 | 24975 | 2 (0)| 00:00:01 | | 1 | TABLE ACCESS FULL| YALLONKING | 999 | 24975 | 2 (0)| 00:00:01 | -------------------------------------------------------------------------------- Note ----- - dynamic sampling used for this statement Statistics ---------------------------------------------------------- 131 recursive calls 0 db block gets 96 consistent gets 0 physical reads 0 redo size 28941 bytes sent via SQL*Net to client 1111 bytes received via SQL*Net from client 68 SQL*Net roundtrips to/from client 4 sorts (memory) 0 sorts (disk) 999 rows processed
上边的sql明显没有使用到索引,所以在下边的查询中也没有监控到使用的迹象。
SQL> set autot off SQL> select index_name,monitoring,used from v$object_usage; INDEX_NAME MON USE ------------------------------ --- --- IDX_ID YES NO
下边使用用到索引的sql查询
SQL> set autot traceonly SQL> select * from yallonking where id=2; Execution Plan ---------------------------------------------------------- Plan hash value: 3725498274 ------------------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | 25 | 2 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID| YALLONKING | 1 | 25 | 2 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | IDX_ID | 1 | | 1 (0)| 00:00:01 | ------------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("ID"=2) Note ----- - dynamic sampling used for this statement Statistics ---------------------------------------------------------- 12 recursive calls 3 db block gets 17 consistent gets 1 physical reads 544 redo size 474 bytes sent via SQL*Net to client 385 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
此刻上边可以看见在使用了该索引的sql后,在v$object_usage中有了相关记录
SQL> set autot off SQL> select index_name,monitoring,used from v$object_usage; INDEX_NAME MON USE ------------------------------ --- --- IDX_ID YES YES SQL> alter index idx_id nomonitoring usage; Index altered.
(二)查看历史视图判断索引使用的情况
SQL> select d.object_name,d.operation,d.options,count(1) from dba_hist_sql_plan d,dba_hist_sqlstat h where d.object_owner <> 'SYS' and d.operation like '%INDEX%' and d.sql_id = h.sql_id group by d.object_name,d.operation,d.options order by 1,2,3; OBJECT_NAME OPERATION OPTIONS COUNT(1) ------------------------------- ------------------------------ ------------------------------ ---------- AQ$_QUEUES_CHECK INDEX RANGE SCAN 7 AQ$_QUEUE_TABLES_PRIMARY INDEX UNIQUE SCAN 17 MGMT_CURRENT_SEVERITY_IDX_03 INDEX RANGE SCAN 1 MGMT_JOB_EXEC_IDX01 INDEX RANGE SCAN 15 MGMT_JOB_EXEC_SUMM_IDX04 INDEX RANGE SCAN 4 MGMT_JOB_PK INDEX UNIQUE SCAN 15 MGMT_METRICS_IDX_01 INDEX RANGE SCAN 6 MGMT_METRICS_PK INDEX RANGE SCAN 1 MGMT_METRIC_COLLECTIONS_PK INDEX UNIQUE SCAN 12 MGMT_METRIC_COLLECTIONS_REP_PK INDEX FULL SCAN 12 MGMT_PARAMETERS_IDX_01 INDEX RANGE SCAN 6 OBJECT_NAME OPERATION OPTIONS COUNT(1) ------------------------------- ------------------------------ ------------------------------ ---------- MGMT_PERFORMANCE_NAMES_PK INDEX UNIQUE SCAN 2 MGMT_SYSTEM_ERROR_LOG_01 INDEX SKIP SCAN 1 MGMT_SYSTEM_PERF_LOG_IDX_01 INDEX RANGE SCAN 6 MGMT_TARGETS_IDX_01 INDEX UNIQUE SCAN 5 RLM$JOINQKEY INDEX FULL SCAN 1 RLM$SCHACTIONORDER INDEX FULL SCAN 1 SYS_C003978 INDEX UNIQUE SCAN 6 SYS_C003981 INDEX UNIQUE SCAN 6 SYS_IOT_TOP_49769 INDEX FULL SCAN 6 20 rows selected.
发现上边没有出现监控的索引的记录,是因为数据还没有写到历史视图中,故在此手动生成一次快照即可
SQL> exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT(); PL/SQL procedure successfully completed. SQL> select d.object_name,d.operation,d.options,count(1) from dba_hist_sql_plan d,dba_hist_sqlstat h where d.object_owner <> 'SYS' and d.operation like '%INDEX%' and d.sql_id = h.sql_id group by d.object_name,d.operation,d.options order by 1,2,3; OBJECT_NAME OPERATION OPTIONS COUNT(1) ------------------------------- ------------------------------ ------------------------------ ---------- AQ$_QUEUES_CHECK INDEX RANGE SCAN 7 AQ$_QUEUE_TABLES_PRIMARY INDEX UNIQUE SCAN 17 IDX_ID INDEX RANGE SCAN 2 MGMT_CURRENT_METRICS_PK INDEX FULL SCAN 1 MGMT_CURRENT_SEVERITY_IDX_03 INDEX RANGE SCAN 1 MGMT_JOB_EXEC_IDX01 INDEX RANGE SCAN 20 MGMT_JOB_EXEC_SUMM_IDX04 INDEX RANGE SCAN 4 MGMT_JOB_PK INDEX UNIQUE SCAN 20 MGMT_METRICS_IDX_01 INDEX RANGE SCAN 6 MGMT_METRICS_PK INDEX RANGE SCAN 1 MGMT_METRIC_COLLECTIONS_PK INDEX UNIQUE SCAN 12 OBJECT_NAME OPERATION OPTIONS COUNT(1) ------------------------------- ------------------------------ ------------------------------ ---------- MGMT_METRIC_COLLECTIONS_REP_PK INDEX FULL SCAN 12 MGMT_PARAMETERS_IDX_01 INDEX RANGE SCAN 7 MGMT_PERFORMANCE_NAMES_PK INDEX UNIQUE SCAN 2 MGMT_SYSTEM_ERROR_LOG_01 INDEX SKIP SCAN 1 MGMT_SYSTEM_PERF_LOG_IDX_01 INDEX RANGE SCAN 6 MGMT_TARGETS_IDX_01 INDEX UNIQUE SCAN 6 MGMT_TARGET_PROPERTIES_PK INDEX RANGE SCAN 1 MGMT_TARGET_ROLLUP_TIMES_PK INDEX SKIP SCAN 1 RLM$JOINQKEY INDEX FULL SCAN 1 RLM$SCHACTIONORDER INDEX FULL SCAN 1 SYS_C003978 INDEX UNIQUE SCAN 6 OBJECT_NAME OPERATION OPTIONS COUNT(1) ------------------------------- ------------------------------ ------------------------------ ---------- SYS_C003981 INDEX UNIQUE SCAN 6 SYS_IOT_TOP_49769 INDEX FULL SCAN 6 24 rows selected.