73 oracle索引的監控

2021-06-04 10:49:27 字數 2033 閱讀 3530

最近的研究發現 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 然後執行這些指令碼就開始監...