Oracle如何监控表的DML次数
在數據庫技術大會上,做了《構建高可用數據庫監控系統》的分享以后,很多朋友對北斗如何實現表的DML次數監控有興趣,會上因為時間的原因,我只是說有系統視圖可以查到這個信息,因此有了本文,可以稍微詳細一點來說明是如何實現的。
我說的系統視圖,具體指的是dba_tab_modifications/all_tab_modifications/user_tab_modifications?,這幾個視圖收集了表自從上一次分析之后的DML累積次數。但是要注意,考慮到性能的影響,Oracle并不是實時統計這個數據的,在Oracle9i之前,約3個小時SMON進程會刷新一次數據,而Oracle9i以后這個時間間隔變成了15分鐘。
因此以較高的頻率來實時監控這個表的話,得到的并不是當前的準確數據。Oracle在dbms_stat包中提供了一個過程來手動刷新統計數據,假如在一天的業務低峰期采集一次數據的話,可以先執行該過程,就能得到較為準確的數據。但是,不建議在業務高峰期執行該過程。
exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;在Oracle10g之前,必須手工開啟表的monitoring屬性,才會將DML統計信息收集到這個視圖中。可以通過dba_tables.monitoring列查看表是否已經開啟了監控。關于這個變化,可以參考Metalink ID 252597.1
alter table test monitoring;Oracle10g之后,只要statistics_level是TYPICAL(默認)或者ALL,就能自動收集信息了,即使給表設置為nomonitoring也不能阻止,這個表的屬性已經被廢棄了。
SQL> desc dba_tab_modifications?Name ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Null? ? ?Type
?----------------------------------------- -------- ----------------------------
?TABLE_OWNER ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VARCHAR2(30)
?TABLE_NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? VARCHAR2(30)
?PARTITION_NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? VARCHAR2(30)
?SUBPARTITION_NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VARCHAR2(30)
?INSERTS ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NUMBER
?UPDATES ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NUMBER
?DELETES ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NUMBER
?TIMESTAMP ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DATE
?TRUNCATED ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VARCHAR2(3)
?DROP_SEGMENTS ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NUMBER
?
?
?
總結
以上是生活随笔為你收集整理的Oracle如何监控表的DML次数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ORACLE 10G以后的ORDER B
- 下一篇: 数据库启动提示: ORA-27102: