1. 程式人生 > >oracle中監控表中的索引是否使用

oracle中監控表中的索引是否使用

在oracle中,合理規劃索引,避免為後續的維護和優化帶來麻煩。因此有時候需要監控已有的索引是否在使用,oracle提供了監控索引是否使用的工具:monitoring

首先,我們如果是監控一個表上的所有索引,可以這樣先生成監控的命令:

SQL> select 'alter index '||index_name||' monitoring usage;' from user_indexes where table_name='MIDDLE_記錄表';
'ALTERINDEX'||INDEX_NAME||'MON
------------------------------------------------------------
alter index IDX_BQ_SYNC_TIME monitoring usage;
alter index IDX_BQ_lrsj monitoring usage;
alter index IDX_BQ_CODE monitoring usage;
alter index IDX_BQ_SYNC_BZ monitoring usage;

然後執行這些指令碼就開始監控了,監控資訊可通過V$OBJECT_USAGE檢視,通過used列可知道這個索引是否被使用:

SQL>  select * from V$object_Usage;
INDEX_NAME                     TABLE_NAME                     MONITORING USED START_MONITORING    END_MONITORING
------------------------------ ------------------------------ ---------- ---- ------------------- -------------------
IDX_BQ_SYNC_TIME               MIDDLE_記錄表              YES        NO   12/11/2016 15:00:55 
IDX_BQ_lrsj                               MIDDLE_記錄表              YES        NO   12/11/2016 15:00:55 
IDX_BQ_BILLCODE                MIDDLE_記錄表              YES        NO   12/11/2016 15:00:55 
IDX_BQ_SYNC_BZ                 MIDDLE_記錄表              YES        NO   12/11/2016 15:00:55 

取消監控某個索引:

SQL> ALTER INDEX IDX_BQ_lrsj  NOMONITORING USAGE;

Index altered.

SQL> select * from V$OBJECT_USAGE;

那些持續關注一定時間沒有使用的索引就可以刪除了,以提高DML操作效率

實際工作中,我們可以選擇暫時禁用索引功能,來提高資料表插入、修改效率。因為,在索引起作用的情況下,大量資料的DML操作會帶來很多的索引更新和Redo Log的生成。這在批量資料載入的時候是不需要的。所以,可以暫時禁用索引。