監控index 的使用情況
一個系統,經過長期的執行、維護和版本更新後,可能會產生大量的索引,甚至索引所佔空間遠遠大於資料所佔的空間。很多索引,在初期設計時,對於系統來說是有用的。但是,經過系統的升級、資料表結構的調整、應用的改變,很多索引逐漸不被使用,成為了垃圾索引。這些索引佔據了大量資料空間,增加了系統的維護量,甚至會降低系統效能。因此,DBA應該根據系統的變化,找出垃圾索引,為系統減肥。
Oracle 9i後,可以透過設定對索引進行監控,來監視索引在系統中是否被使用到。語法如下:
alter index
如果需要取消監控,可以使用以下語句:
alter index
設定監控後,就可以查詢檢視v$object_usage來確認該索引是否被使用。
以下是一個DEMO演示:
SQL> select * from v$object_usage;
INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
------------------------------ ------------------------------ ---------- ---- ------------------- -------------------
SQL> alter index QUEST_TEMPLATE_IDX monitoring usage;
Index altered
SQL> select count(*) from quest_template a
2 where minlevel >=38
3 and maxlevel <= 45;
COUNT(*)
----------
165
SQL> select * from v$object_usage;
INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
------------------------------ ------------------------------ ---------- ---- ------------------- -------------------
QUEST_TEMPLATE_IDX QUEST_TEMPLATE YES YES 05/22/2007 14:02:51
但是,這個方法可能存在一個問題:對於一個複雜系統來說,索引的數量可能是龐大的,那麼我們如何來鑑定那些索引是值得懷疑的,應該被監控的呢?換句話說,我們如何減少監控範圍呢?這裡介紹幾個方法。
1、利用library cache資料
在library cache中,儲存了系統中游標的查詢計劃(並非全部,受library cache大小的限制),透過檢視v$sql_plan,我們可以查詢到這些資料。利用這些資料,我們可以排除那些出現在查詢計劃中的索引:
select a.object_owner, a.object_name
from v$sql_plan a, v$sqlarea b
where a.sql_id = b.sql_id
and a.object_type='INDEX'
and b.last_load_time >
2、利用statspack表
Statspack建立以後,為了記錄快照的統計資料,會建立一系列的以stats$開頭的表。其中stats$sql_plan表記錄了每個快照中超過其閾值的語句的查詢計劃。因此我們可以將出現在該表中索引物件排除在監控範圍之外:
select a.object_owner, a.object_name
from stats$sql_plan a, stats$sql_plan_usage b
where a.plan_hash_value = b.plan_hash_value
and a.object_type='INDEX'
and b.last_active_time >
但是,這張表在預設情況下(snapshot level=5)是不會記錄資料的,只有snapshot>=6才會有記錄。另外,該表在8i中是沒有的。
3、利用AWR資料
10g以後,oracle出現了比statspack更加強大的效能分析工具AWR,它也同樣記錄了系統中的統計資料以供分析。我們也同樣可以從其中分析出那些索引是被使用到的。
select b.object_owner, b.object_name
from dba_hist_snapshot a, dba_hist_sql_plan b, dba_hist_sqlstat c
where a.snap_id = c.snap_id
and b.sql_id=c.sql_id
and b.object_type = 'INDEX'
and a.startup_time >
利用上述方法,過濾掉大部分肯定被使用的index後,再綜合應用,選擇可疑索引進行監控,找出並刪除無用索引,為資料庫減肥。
參考:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-668883/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料庫監控Index的使用情況Oracle資料庫Index
- 監視index的使用情況Index
- 監控Oracle索引的使用情況Oracle索引
- Oracle Undo使用情況監控Oracle
- 監控系統使用情況shell指令碼指令碼
- 監控java程式啟動時的CPU使用情況Java
- 監控某個目錄使用情況的shell指令碼指令碼
- 用於自動監控磁碟使用情況的 Shell 指令碼指令碼
- index 監控Index
- 監視磁碟使用情況
- 在Linux中,如何監控系統資源使用情況?Linux
- 更改後的監控某個目錄的使用情況的shell指令碼指令碼
- 用 Bash 指令碼監控 Linux 上的記憶體使用情況指令碼Linux記憶體
- PowerShell 指令碼來監控 CPU、記憶體和磁碟使用情況:指令碼記憶體
- 監控和估計 Informix Dynamic Server 中邏輯日誌的使用情況ORMServer
- 監控index是否被使用Index
- 監控 Python 記憶體使用情況和程式碼執行時間!Python記憶體
- 監控 cpu 記憶體 網路卡的使用情況的一個命令 比較實用記憶體
- 用 Linux Shell 指令碼來監控磁碟使用情況併傳送郵件Linux指令碼
- 監控Index是否被使用過的方法Index
- metricbeat 監控 nginx 情況Nginx
- 使index失效Index
- 監控JVM記憶體使用情況,剩餘空間小於2M時報警JVM記憶體
- 利用Bash指令碼監控Linux伺服器的記憶體使用情況的相關資料指令碼Linux伺服器記憶體
- 監控 SQL Server 的執行狀況SQLServer
- Linux中監控磁碟分割槽及使用情況的命令有哪些?Linux
- Linux中監控磁碟分割槽和使用情況的幾個工具Linux
- nagios監控例項 -- 伺服器基本狀況監控iOS伺服器
- 監控SQL Server的執行狀況(1)SQLServer
- 監控oracle的連線(session)情況[Z]OracleSession
- 【INDEX】使用“alter index ××× monitoring usage;”語句監控索引使用與否Index索引
- MySQL中slave監控的延遲情況分析MySql
- Oracle 索引的使用情況檢視Oracle索引
- 檢視Undo使用情況的SQLSQL
- 被動式監控oracle的rman備份情況Oracle
- Netdata Mysql執行情況監控外掛MySql
- 在oracle中監視索引的使用情況Oracle索引
- Oracle 歸檔使用情況分析Oracle