首先,我們如果是監控一個表上的所有索引,可以這樣先生成監控的命令:
SQL> select 'alter index '||index_name||' monitoring usage;' from user_indexes where table_name=upper('mpaymentappl');
'ALTERINDEX'||INDEX_NAME||'MONITORINGUSAGE;'
------------------------------------------------------------
alter index IDX_MPAYMENTAPPL_BCODE monitoring usage;
alter index MPAYMENTAPPL_FLAGS monitoring usage;
alter index MPAYMENTAPPL_PAICODE monitoring usage;
然後執行這些腳本就開始監控了,監控信息可通過V$OBJECT_USAGE查看,通過used列可知道這個索引是否被使用:
SQL> select * from V$OBJECT_USAGE;
INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING
------------------------------ ------------------------------ --- --- ------------------- -------------------
IDX_MPAYMENTAPPL_BCODE MPAYMENTAPPL YES NO 03/24/2010 10:55:27
MPAYMENTAPPL_FLAGS MPAYMENTAPPL YES NO 03/24/2010 10:55:27
MPAYMENTAPPL_PAICODE MPAYMENTAPPL YES NO 03/24/2010 10:55:28
取消監控某個索引:
SQL> ALTER INDEX MPAYMENTAPPL_FLAGS NOMONITORING USAGE;
Index altered.
SQL> select * from V$OBJECT_USAGE
2 /
INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING
------------------------------ ------------------------------ --- --- ------------------- -------------------
IDX_MPAYMENTAPPL_BCODE MPAYMENTAPPL YES NO 03/24/2010 10:55:27
MPAYMENTAPPL_FLAGS MPAYMENTAPPL NO NO 03/24/2010 10:55:27 03/24/2010 10:57:19
MPAYMENTAPPL_PAICODE MPAYMENTAPPL YES NO 03/24/2010 10:55:28
那些持續關注一定時間沒有使用的索引就可以刪除了,以提高DML操作效率
實際工作中,我們可以選擇暫時禁用索引功能,來提高數據表插入、修改效率。因爲,在索引起作用的情況下,大量數據的DML操作會帶來很多的索引更新和Redo Log的生成。這在批量數據加載的時候是不需要的。所以,可以暫時禁用索引。