過度索引導致 INSERT/UPDATE/DELETE 每行需維護大量索引結構,**DML 效能嚴重下降**。許多索引從未被查詢使用。
SET PAGES 999
SET HEADING OFF
SPOOL enable_mon.sql
SELECT 'ALTER INDEX ' || owner || '.' || index_name || ' MONITORING USAGE;'
FROM dba_indexes
WHERE owner NOT IN ('SYS','SYSTEM','PERFSTAT');
SPOOL OFF
@enable_mon
讓日常批次、報表、線上交易自然跑完。
SELECT index_name, table_name, monitoring, used
FROM v$object_usage
WHERE used = 'NO';
USED = 'NO' 表示監控期間**從未被優化器採用**。DBMS_STATS 可能採樣索引葉塊)。DROP INDEX,並收集受影響表統計。-- 單一索引開啟/關閉
ALTER INDEX scott.emp_idx MONITORING USAGE;
ALTER INDEX scott.emp_idx NOMONITORING USAGE;
-- 查詢特定索引
SELECT * FROM v$object_usage WHERE index_name = 'EMP_IDX';
USED=YES,再推生產。DBA_HIST_SQL_PLAN (AWR) 分析歷史執行計畫,雙重確認。