- 介绍
优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划。优化器统计信息包括:
表的统计信息:行数、Block数、行平均长度
列的统计信息:列中不同值的数量、列中null的数量、数据分布(柱状图/直方图)
索引的统计信息:叶子块的数量、索引的高度、聚簇因子(clustering factor)
系统的统计信息:I/O性能和利用、CPU性能和利用
优化器统计信息存储在下列数据字典中
· DBA_TABLES
· DBA_OBJECT_TABLES
· DBA_TAB_STATISTICS
· DBA_TAB_COL_STATISTICS
· DBA_TAB_HISTOGRAMS
· DBA_INDEXES
· DBA_IND_STATISTICS
· DBA_CLUSTERS
· DBA_TAB_PARTITIONS
· DBA_TAB_SUBPARTITIONS
· DBA_IND_PARTITIONS
· DBA_IND_SUBPARTITIONS
· DBA_PART_COL_STATISTICS
· DBA_PART_HISTOGRAMS
· DBA_SUBPART_COL_STATISTICS
· DBA_SUBPART_HISTOGRAMS
· INDEX_STATS 存储ANALYZE ..VALIDATE STRUCTURE统计信息
· AUX_STATS$ 存储CPU统计信息
· X$KCFIO 存储I/O统计信息
![30d61a6eec8bc44b5882103fb5fda6b6.png](https://i-blog.csdnimg.cn/blog_migrate/fe8fcbaa69c3d289ef845796a583d74d.jpeg)
因为数据库中的对象会经常的变化,所以统计信息必须有规律的更新以便更加准确的描述这些数据库对象。
统计信息默认是由ORACLE自动维护的,不过我们也可以用DBMS_STATS包手动收集统计信息。
DBMS_STATS包同样提供了过程来维护统计信息。
关于DBMS_STATS包更详细的描述请参阅官方文档PL/SQL Packages and Types Reference部分。
![9761c0eb0da0853aa63846309eddb090.png](https://i-blog.csdnimg.cn/blog_migrate/10d56613788da89a6f5aea41aaaf2186.jpeg)
2.自动收集统计信息
Oracle10g中,在安装Oracle的时候,就默认创建了一个名为GATHER_STATS_JOB的job来自动收集优化器统计信息,这个job收集数据库中所有对象的统计信息。
默认的情况下这个job是周一到周五每天晚上10点到第二天早上6点以及整个周末来收集统计信息。
可以查看DBA_SCHEDULER_JOBS, DBA_SCHEDULER_PROGRAMS,DBA_SCHEDULER_WINDOWS,DBA_SCHEDULER_JOB_RUN_DETAILS等视图来查看JOB设置以及运行信息。
自动收集过期的统计信息依赖于表监控特征,在Oracle10g中表监控默认是开启的,同时它也依赖STATISTICS_LEVEL参数的值,10g中默认为typical,只有将STATISTICS_LEVEL参数设置为ALL或者TYPICAL才能让ORACLE识别过期的统计信息。
![1e09c4b7665f897ca7ebafa51e2a3a82.png](https://i-blog.csdnimg.cn/blog_migrate/53f44ec78316f80af78279d6d22d3326.jpeg)
3.关闭自动收集统计信息
在某些情况下,我们想关闭自动收集统计信息那么我们可以利用如下方法:
BEGIN
DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
END;
/