剛才發(fā)現(xiàn)某個(gè)OLTP系統(tǒng)中某張表建立了16個(gè)
索引,,由于不確定索引是否有在各程序中被使用,,不能隨意刪除。因此,,需要
監(jiān)控已有的索引是否在使用,,Oracle 9i以上版本提供了簡(jiǎn)單的方法可以做到這點(diǎn):
ALTER INDEX PK_TB_PERSON_INFO MONITORING USAGE;
用以上命令開啟索引監(jiān)控之后就可以從v$object_usage中查詢到數(shù)據(jù)(即使索引還沒有被使用),START_MONITORING字段會(huì)寫入開始監(jiān)控的時(shí)間,;當(dāng)某條
SQL使用了相關(guān)的索引之后,,其“USED”字段就會(huì)更新成“YES”。監(jiān)控結(jié)束之后最好關(guān)閉監(jiān)控,,以提高效率:
ALTER INDEX PK_TB_PERSON_INFO NOMONITORING USAGE;
那些持續(xù)關(guān)注一定時(shí)間沒有使用的索引就可以記錄下來,,與項(xiàng)目組討論,確認(rèn)可以刪除則DROP掉,,以提高DML操作效率,。
需要注意的是:V$OBJECT_USAGE要去每個(gè)USER中查詢,即使用SYS權(quán)限開啟的其他USER索引的監(jiān)控,也無法從SYS用戶的V$OBJECT_USAGE中查到相關(guān)的記錄,。