统计信息的重要,大家都知道。那么什么是统计信息呢?
统计信息:是些数据,这些数据反映数据库,以及数据库中对象的详细信息.
查询优化器通过根据统计信息来决定选择执行何种执行计划
统计信息有以下一些:
Table statistics
-
Number of rows
-
Number of blocks
-
Average row length
Column statistics
-
Number of distinct values (NDV) in column
-
Number of nulls in column
-
Data distribution (histogram)
Index statistics
-
Number of leaf blocks
-
Levels
-
Clustering factor
System statistics
-
I/O performance and utilization
-
CPU performance and utilization
统计信息存储在数据字典中,可以通过了解相关的视图去查看统计信息.因为数据库当中的对象时常发生变化,统计信息就需要经常更新,这样才能准确反映数据库中对象的真实情况。
统计信息的维护是ORACLE自己在维护。用户可以使用DBMS_STATS 包来维护统计信息.这个包提供了一些用于管理统计信息的过程.用户可以保存,恢复统计信息,把统计信息从一个系统,导到另一个系统.锁定统计信息等.
如何自动收集统计信息呢?
收集统计信息的推荐方法:让ORACLE自己去收集.ORACLE通过一个定时任务去做这个事情,JOB名称:GATHER_STATS_JOB。它收集数据库中所有的统计信息。包含:
漏掉的,和过时的统计信息
当数据库创建的时候,这个JOB就创建了,当维护程序窗口打开的时候,这个过程就被调度执行.通常是晚上10点到早上6点自动收集统计信息.周末是全天收集.
通过视图查看DBA_SCHEDULER_JOBS 是否在自动收集统计信息.
如果要停止自动收集,在SQLPLUS中,以SYS用户执行
BEGIN
DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
END;
/
何时应该手动收集统计信息呢?
#1不稳定的表:那些在白天要被删除,清空,重建的表
#2.Objects which are the target of large bulk loads which add 10% or more to the object's total size.
这时候可以类似这样处理:
BEGIN
DBMS_STATS.DELETE_TABLE_STATS('OE','ORDERS');
DBMS_STATS.LOCK_TABLE_STATS('OE','ORDERS');
END;
/
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15720542/viewspace-629646/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15720542/viewspace-629646/