Oracle确定过期的统计信息

php中文网
发布: 2016-06-07 17:33:45
原创
1091人浏览过

经过一段时间,随着数据库对象被修改,必须定期搜集统计信息。为了确定数据库对象需要新的数据库统计信息,oracle数据库提供了一

youmust regularly gather statistics on database objects as thesedatabase objects are modified over time. to determine whether agiven database object needs new database statistics, oracledatabase provides a table monitoring facility. this monitoring isenabled by default when statistics_level is set totypical orall.

经过一段时间,随着数据库对象被修改,,必须定期搜集统计信息。为了确定数据库对象需要新的数据库统计信息,oracle数据库提供了一个表监控特性。当STATISTICS_LEVEL设置为TYPICAL或ALL时,表监控特性默认是启动的。

 

Monitoring tracks the approximate number of INSERTs,UPDATEs, andDELETEs for that table andwhether the table has been truncated since the last time statisticswere gathered. You can access information about changes of tablesin theUSER_TAB_MODIFICATIONS view. Following adata-modification, there may be a few minutes delay while OracleDatabase propagates the information to this view. Use theDBMS_STATS.FLUSH_DATABASE_MONITORING_INFO procedure toimmediately reflect the outstanding monitored information kept inthe memory.

 

表监控特性跟踪从最后一次统计搜集后,表的insert、update、delete操作的近似数,和表是否被truncate。可以通过查询USER_TAB_MODIFICATIONS视图获得关于表变化的信息。数据修改后,通过USER_TAB_MODIFICATIONS获取修改信息可能有一些延时。使用DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO立即将延时信息保持到内存中。

 

TheGATHER_DATABASE_STATS orGATHER_SCHEMA_STATS procedures gather new statisticsfor tables with stale statistics when theOPTIONSparameter is set to GATHER STALE orGATHERAUTO. If a monitored table has been modified more than10%, then these statistics are considered stale and gatheredagain.

 

当属性OPTIONS设置为GATHER STALEor GATHERAUTO,GATHER_DATABASE_STATS或GATHER_SCHEMA_STATS为有过期统计信息的表搜集新的统计信息,如果一个监控的表修改超过了10%,则统计信息被认为过期,需再次搜集。

 

部分实验如下:


SQL> select * from test01;

A B
---------- ----------
21 10
9 10
22 10
23 10
24 10
25 10
1 1
2 2
44 44
55 55

10 rowsselected. ------表数据10行

SQL> select * fromuser_tab_modifications;

no rowsselected ------实验前已对测试库做了搜集统计信息,此时显示为空

SQL> insert into test01 values(66,66);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from user_tab_modifications;

no rowsselected ------表的修改未及时显示

SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO; ------将修改的信息keep到内存

PL/SQL procedure successfully completed.

SQL> selecttable_name,INSERTS,UPDATES,DELETES,truncated fromuser_tab_modifications;

TABLE_NAME INSERTS UPDATES DELETES TRU
------------------------------ ---------- ---------- -------------
TEST01 10 0 NO ------ 1 代表刚才的1条insert

 

为更好的展现监控信息,接着进行update、delete、truncate操作演示:


SQL> update test01 set a=77 where b=66;

1 row updated.

SQL> commit;

Commit complete.

SQL> selecttable_name,INSERTS,UPDATES,DELETES,truncated fromuser_tab_modifications;

TABLE_NAME INSERTS UPDATES DELETES TRU
------------------------------ ---------- ---------- -------------
TEST01 1 0 0 NO

SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;

PL/SQL procedure successfully completed.

SQL> selecttable_name,INSERTS,UPDATES,DELETES,truncated fromuser_tab_modifications;

TABLE_NAME INSERTS UPDATES DELETES TRU
------------------------------ ---------- ---------- -------------
TEST01 1 1 0 NO

SQL> delete from test01 where a=77;

1 row deleted.

SQL> commit;

Commit complete.

SQL> selecttable_name,INSERTS,UPDATES,DELETES,truncated fromuser_tab_modifications;

TABLE_NAME INSERTS UPDATES DELETES TRU
------------------------------ ---------- ---------- -------------
TEST01 1 1 0 NO

SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;

PL/SQL procedure successfully completed.

SQL> selecttable_name,INSERTS,UPDATES,DELETES,truncated fromuser_tab_modifications;

TABLE_NAME INSERTS UPDATES DELETES TRU
------------------------------ ---------- ---------- -------------
TEST01 1 1 1 NO

SQL> truncate table test01;

Table truncated.

SQL> selecttable_name,INSERTS,UPDATES,DELETES,truncated fromuser_tab_modifications;

TABLE_NAME INSERTS UPDATES DELETES TRU
------------------------------ ---------- ---------- -------------
TEST01 1 1 1 NO

SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;

PL/SQL procedure successfully completed.

SQL> selecttable_name,INSERTS,UPDATES,DELETES,truncated fromuser_tab_modifications;

TABLE_NAME INSERTS UPDATES DELETES TRU
------------------------------ ---------- ---------- -------------
TEST01 1 1 11YES

 

对表test01执行搜集统计信息,监控表的信息会清除:


SQL> execdbms_stats.gather_table_stats(null,'test01');



PL/SQL procedure successfully completed.

SQL> selecttable_name,INSERTS,UPDATES,DELETES,truncated fromuser_tab_modifications;

no rows selected

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号