對索引開啟monitoring方法
對索引開啟monitoring方法
一個系統,經過長期的執行、維護和版本更新後,可能會產生大量的索引,甚至索引所佔空間遠遠大於資料所佔的空間。很多索引,在初期設計時,對於系統來說是有用的。但是,經過系統的升級、資料表結構的調整、應用的改變,很多索引逐漸不被使用,成為了垃圾索引。這些索引佔據了大量資料空間,增加了系統的維護量,甚至會降低系統效能。因此,DBA應該根據系統的變化,找出垃圾索引,為系統減肥。
Oracle 9i後,可以通過設定對索引進行監控,來監視索引在系統中是否被使用到。語法如下:
如果需要取消監控,可以使用以下語句:
alter
index
設定監控後,就可以查詢檢視v$object_usage來確認該索引是否被使用。
ps:可以通過sys使用者對其他使用者的索引開啟或關閉monitoring,但是sys無法查詢其他使用者索引的monitoring結果,只能使用索引的owner來查詢v$object_usage檢視
案例:
下面通過sys使用者對dwmodel.xj_table_col1_idx 索引開啟monitoring
Connected as SYS
SQL> alter index dwmodel.xj_table_col1_idx monitoring usage;
Index altered
Connected as dwmodel
SQL> select * from v$object_usage;
INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
----------------- ----------------------- ---- ------------------- --------------
XJ_TABLE_COL1_IDX XJ_TABLE YES NO 10/16/2013 10:58:41
SQL> select col1 from dwmodel.xj_table where col1=100;
COL1
----------
100
SQL> select * from v$object_usage;
INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
------------------- ------------- ---------- ---- ------------------- -------------------
XJ_TABLE_COL1_IDX XJ_TABLE YES YES 10/16/2013 10:58:41
但是,這個方法可能存在一個問題:對於一個複雜系統來說,索引的數量可能是龐大的,那麼我們如何來鑑定那些索引是值得懷疑的,應該被監控的呢?換句話說,我們如何減少監控範圍呢?這裡介紹幾個方法:
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 > < START_AUDIT_DATE >;
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 > < START_AUDIT_DATE >;
但是,這張表在預設情況下(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 > < START_AUDIT_DATE >;
利用上述方法,過濾掉大部分肯定被使用的index後,再綜合應用,選擇可疑索引進行監控,找出並刪除無用索引,為資料庫減肥。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24996904/viewspace-774480/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【INDEX】使用“alter index ××× monitoring usage;”語句監控索引使用與否Index索引
- STREAMS MONITORING
- Column Monitoring
- Oracle:TABLE MONITORINGOracle
- oracle index monitoringOracleIndex
- Monitoring WebSite StateWeb
- 開啟 Cocoapods 新選項,加快專案索引速度索引
- 【索引】Oracle之不可見索引和虛擬索引的比對索引Oracle
- VMware vmdk檔案開啟方法
- Oracle EBS Monitoring ScriptsOracle
- Monitoring an SAP instance
- sql monitoring實驗SQL
- Monitoring Core Process...
- Monitoring Open and Cached Cursors
- Monitoring RMAN Backups
- iPhone開啟CarPlay功能方法 iPhone如何開啟CarPlay功能?iPhone
- windows defender怎麼開啟 windows defender啟動方法Windows
- oracle批量重建索引方法Oracle索引
- DBF檔案怎麼開啟?DBF檔案的開啟方法教程
- Apache開啟GZIP壓縮功能方法Apache
- AIX下開啟大頁的方法AI
- Windows10系統開啟快速啟動的方法Windows
- Go: sysmon, Runtime MonitoringGo
- Oracle Real Time SQL MonitoringOracleSQL
- Monitoring Open and Cached Cursors(zt)
- Node.js流,這樣的開啟方式對不對!Node.js
- SQLServer索引優化(2):對於索引中include的理解SQLServer索引優化
- 【Oracle】-【ROWNUM與索引】-索引對ROWNUM檢索的影響Oracle索引
- 【Oracle】-【COMMIT對索引的影響】-從trace看COMMIT對索引的影響OracleMIT索引
- 華為榮耀8小屏模式開啟方法模式
- 開啟mysql和php慢日誌方法MySqlPHP
- Ubuntu開啟終端的方法三種Ubuntu
- 蘋果iPhoneSE護眼模式開啟方法蘋果iPhone模式
- Wndows外殼程式設計-呼叫"開啟方式..."對話方塊來開啟文件程式設計
- 資料庫——對索引的理解資料庫索引
- shrink 操作對索引的影響索引
- Oracle對索引分析的優化Oracle索引優化
- Update操作對索引的影響索引