ORACLE監控DML語句的一些資料的彙總

zecaro發表於2010-11-30

DBA_TAB_MODIFICATIONS


DBA_TAB_MODIFICATIONS describes modifications to all tables in the database that have been modified since the last time statistics were gathered on the tables. Its columns are the same as those in "ALL_TAB_MODIFICATIONS".

Note:

This view is populated only for tables with the MONITORING attribute. It is intended for statistics collection over a long period of time. For performance reasons, the Oracle Database does not populate this view immediately when the actual modifications occur. Run the FLUSH_DATABASE_MONITORING_INFO procedure in the DIMS_STATS PL/SQL package to populate this view with the latest information. The ANALYZE_ANY system privilege is required to run this procedure.


Oracle® Database Reference 10g Release 2 (10.2) Part Number B14237-04


--------------------------------------------------------------------------------

注:role dba中已有 ANALYZE ANY   許可權
GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
DBA                            ANALYZE ANY                              YES

 

實驗中,即使是rollback,或者未commit的操作,只要重新整理了FLUSH_DATABASE_MONITORING_INFO 也會記入。

--------------------------------------------------------------------------------


我說的系統檢視,具體指的是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列檢視錶是否已經開啟了監控。

Oracle10g之後,只要statistics_level是TYPICAL(預設)或者ALL,就能自動收集資訊了,即使給表設定為nomonitoring也不能阻止,這個表的屬性已經被廢棄了。

 

--------------------------------------------------------------------------------
 

每15分鐘,smon會重新整理統計結果到資料字典中,oracle使用這些表的資料去判斷表的統計資料是否過期,
如果當表的資料改變超過10%,oracle就認為該表的統計資料已經過期.


Oracle 10g預設表是 monitoring,即使表在建立的時候指定是nomonitoring也是會被忽忽略的
這是由引數:statistics_level決定的, 預設值=TYPICAL
如果設定為BASIC將disable monitoring

系統將自動收集表的統計資訊(由GATHER_STATS_JOB完成,
可以透過 EXEC DBMS_SCHEDULER.DISABLE('GATHER_SCHEDULER_JOB')來取消系統自動收集),
且每3個小時由SMON寫入到資料字典(USER_TABLES.NUM_ROWS)裡。


經過更深入的研究,發現8i之前,資料庫是每3小時自動將SGA的資訊FLUSH到DBA_TAB_MODIFICATIONS中,而9i將這個時間改成每15分鐘.
在10.2.0.3中測試發現,這個檢視並不會自動重新整理,且透過exec dbms_stats.FLUSH_DATABASE_MONITORING_INFO手動重新整理時也存在一個bug,即timestamp 欄位的內容不會改變.在10.2.0.4中已修復了此bug.


http://jolly10.itpub.net/post/7268/453063


 
--------------------------------------------------------------------------------


MORE:

表監控一些實踐學習  

http://blog.csdn.net/yuzhenhuan01/archive/2010/02/01/5277020.aspx

Gather Statistics with DBMS_STATS 

http://www.idevelopment.info/data/Oracle/DBA_tips/Tuning/TUNING_17.shtml

How to statistics

記於2010年11月30日

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23650854/viewspace-682652/,如需轉載,請註明出處,否則將追究法律責任。

相關文章