《性能優化:監控索引的使用情況》要點:
本文介紹了性能優化:監控索引的使用情況,希望對您有用。如果有疑問,可以聯系我們。
黃瑋(Fuyuncat),資深 Oracle DBA,從事 Oracle 數據庫管理、維護與開發工作十余年,有豐富的大型數據庫設計、開發與維護方面的經驗,博客www.HelloDBA.com,
編輯手記:索引的合理使用能夠提高SQL的執行效率,但索引并不是萬能的,也不是所有的索引都會被Oracle使用,今天揀選這篇文章,帶大家一起給數據庫減肥.
一個系統,經過長期的運行、維護和版本更新后,可能會產生大量的索引,甚至索引所占空間遠遠大于數據所占的空間.很多索引,在初期設計時,對于系統來說是有用的.但是,經過系統的升級、數據表結構的調整、應用的改變,很多索引逐漸不被使用,成為了垃圾索引.這些索引占據了大量數據空間,增加了系統的維護量,甚至會降低系統性能.因此,DBA應該根據系統的變化,找出垃圾索引,為系統減肥.
Oracle 9i后,可以通過設置對索引進行監控,來監視索引在系統中是否被使用到.語法如下:
alter index <INDEX_NAME> monitoring usage;
如果需要取消監控,可以使用以下語句:
alter index <INDEX_NAME> nomonitoring usage;
設置監控后,就可以查詢視圖v$object_usage來確認該索引是否被使用.
以下是一個DEMO演示:
但是,這個方法可能存在一個問題:對于一個復雜系統來說,索引的數量可能是龐大的,那么我們如何來鑒定那些索引是值得懷疑的,應該被監控的呢?換句話說,我們如何減少監控范圍呢?這里介紹幾個方法.
在library cache中,存儲了系統中游標的查詢計劃(并非全部,受library cache大小的限制),通過視圖v$sql_plan,我們可以查詢到這些數據.利用這些數據,我們可以排除那些出現在查詢計劃中的索引:
Statspack建立以后,為了記錄快照的統計數據,會創建一系列的以stats$開頭的表.其中stats$sql_plan表記錄了每個快照中超過其閾值的語句的查詢計劃.因此我們可以將出現在該表中索引對象排除在監控范圍之外:
但是,這張表在默認情況下(snapshot level=5)是不會記錄數據的,只有snapshot>=6才會有記錄.另外,該表在8i中是沒有的.
10g以后,oracle出現了比statspack更加強大的性能分析工具AWR,它也同樣記錄了系統中的統計數據以供分析.我們也同樣可以從其中分析出那些索引是被使用到的.
利用上述方法,過濾掉大部分肯定被使用的index后,再綜合應用,選擇可疑索引進行監控,找出并刪除無用索引,為數據庫減肥.
文章來源:Oracle
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4415.html