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
http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/statviews_4149.htm#sthref1901
--------------------------------------------------------------------------------
注: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也不能阻止,这个表的属性已经被废弃了。
http://www.ningoo.net/html/2010/how_to_monitor_table_dml_statistics.html
--------------------------------------------------------------------------------
每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.youkuaiyun.com/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
http://www.fadalti.com/oracle/database/how_to_statistics.htm
记于2010年11月30日
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23650854/viewspace-682652/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23650854/viewspace-682652/
本文详细介绍了Oracle数据库中用于监控表更改的视图DBA_TAB_MODIFICATIONS及其使用方法。包括如何手动刷新统计数据以获取准确信息,Oracle不同版本间自动刷新频率的变化,以及表监控属性的设置。
182

被折叠的 条评论
为什么被折叠?



