最近的研究發現 oracle 資料庫所使用的索引從來沒有達到過可用索引數的1/4,
或者其用法與其開始設計的意圖不相同。未用的索引浪費空間,而且還會降低 dml
的速度,尤其是 update 和 insert 語句;控資料庫索引的使用,釋放那些未被使用
的索引,從而節省維護索引的開銷,優化sql效能
在 oracle9i 之前,監控索引使用的唯一方法是執行他們的程式庫緩中的所有sql,
然後手工記下所有被使用的索引。
oracle9i中如何確定索引的使用情況
在oracle9i中,情況會簡單的多,因為有乙個新的字典檢視v$sql_plan儲存了實際計畫,
這些計畫用於執行共享sql區中得語句。v$sql_plan檢視很類似與計畫表,但v$sql_plan
使用address和hash_value列 來識別語句, 而計畫表使用使用者提供得statement_id來識
別語句。下面的sql顯示了在乙個oracle9i資料庫中,由出現在共享sql區中語句使用的所
有索引
select object_owner, object_name, options, count(*)
from v$sql_plan
where operation='index'
and object_owner!='sys'
group by object_owner, object_name, operation, options
order by count(*) desc;
所有基於共享sql區中的資訊來識別索引使用情況的方法, 都可能會收集到不完整的資訊。共享sql區是
乙個動態結構,除非能對它進行足夠頻繁的取樣, 否則在有關索引使用的情況的資訊被收集之前,sql語
句可能就已經(因為老化)被移出快取了。
oracle9i提供乙個簡單的方法來開啟和關閉索引使用跟蹤,那就是monitoring usage 子句:
alter index cust_name_idx monitoring usage;
alter index cust_name_idx nomonitoring usage;
這個命令使用v$object_usage 檢視和 usage 欄位來判斷索引是否被訪問過。你可能期望 usage 欄位是乙個數字值,
這樣你就可以知道索引被使用的次數,但不幸的是,它的取值只為yes 或no。但不管怎樣,如果你接手乙個以前開發
的資料庫,而且老資料庫在沒有考慮到 sql 訪問表的情況下建立了索引,那麼這個工具對你是很有用的。index monitoring
特性的開銷非常小,而對定位和丟棄不需要的索引很有幫助
開啟整個方案的索引監控的簡單 sql*plus 指令碼
set pages 999
set heading off
spool run_mon.sql
select
'alter index '||
index_name||
' monitoring usage;'
from
dba_indexes
where
owner = 'hpo5';
spool off
sql> @run_mon
oracle索引監控週期的選擇,一般要覆蓋對資料庫所有的操作,避免漏掉
------end-----
ORACLE索引監控
對於單個索引的監控,可以使用下面的命令來完成 alter index monitoring usage 關閉索引監控 alter index nomonitoring usage 觀察監控結果 查詢v object usage檢視 select from v object usage開啟監控 執行系...
如何監控oracle的索引是否使用
很多軟體開發過程中,沒有注意合理規劃索引,造成乙個表上有n多個索引,為後續的維護和優化帶來麻煩。因此有時候需要監控已有的索引是否在使用,oracle提供了監控索引是否使用的工具,很簡單,簡要介紹一下。首先,我們如果是監控乙個表上的所有索引,可以這樣先生成監控的命令 然後執行這些指令碼就開始監控了,監...
如何監控oracle的索引是否使用
很多軟體開發過程中,沒有注意合理規劃索引,造成乙個表上有n多個索引,為後續的維護和優化帶來麻煩。因此有時候需要監控已有的索引是否在使用,oracle提供了監控索引是否使用的工具,很簡單,簡要介紹一下。首先,我們如果是監控乙個表上的所有索引,可以這樣先生成監控的命令 sql 然後執行這些指令碼就開始監...