存在卻未被使用的索引會拖慢 DML(INSERT/UPDATE/DELETE)效能,因每次資料異動都需同步維護索引結構。Oracle 9i 引入索引監控功能,讓 DBA 能精準找出並清理這些冗餘索引。
執行下列 Script 對所有非系統索引開啟監控:
SET PAGES 999
SET HEADING OFF
SPOOL run_monitor.sql
SELECT 'ALTER INDEX ' || owner || '.' || index_name || ' MONITORING USAGE;'
FROM dba_indexes
WHERE owner NOT IN ('SYS','SYSTEM','PERFSTAT');
SPOOL OFF
@run_monitor
待核心業務 SQL 執行一段時間後,查詢 V$OBJECT_USAGE 視圖:
SELECT index_name, table_name, monitoring, used
FROM v$object_usage;
USED 欄位為 NO 即代表該索引在監控期間未被任何查詢使用,可評估移除以降低維護成本。