oracle统计信息收集

11/19/2009来源:Oracle教程人气:5595

统计信息包括下面几类:



表统计:包括记录数、block数和记录平均长度。

列统计:列中不同值的数量(NVD)、空值的数量和数据分布(HISTOGRAM)。

索引统计:索引叶块的数量、索引的层数和聚集因子(CLUSTERING FACTOR)。

系统统计:I/O性能和利用率和CPU性能和利用率。


生成统计信息:

统计信息生成技术包括三种:

基于数据采样的估计方式;

精确计算方式;

用户自定义的统计信息收集方式;

其中采用估算方式可以指定总记录数的估算百分比或者总块数的估算百分比。

分区表的统计信息分为几级:分区表的整体信息、分区的统计信息和子分区的统计信息。

最常用的收集统计信息的方式包括:DBMS_STATS包和ANALYZE语句,Oracle推荐使用DBMS_STATS包来收集统计信息。

DBMS_STATS包中用于收集统计信息的过程包括:

dbms_stats.gather_table_stats  收集表、列和索引的统计信息;
    dbms_stats.gather_schema_stats   收集SCHEMA下所有对象的统计信息;
     dbms_stats.gather_index_stats  收集索引的统计信息;
    dbms_stats.gather_system_stats  收集系统统计信息。
    dbms_stats.delete_table_stats  删除表的统计信息
    dbms_stats.export_table_stats 输出表的统计信息
    dbms_stats.create_state_table
    dbms_stats.set_table_stats 设置 表的统计
    dbms_stats.auto_sample_size

dbms_stats.gather_database_stats:收集数据库中所有对象的统计信息;



在CREATE INDEX和ALTER INDEX REBUILD时可以指定COMPUTE STATISTICS语句,对于非分区表重建索引时会收集表、列和索引的统计信息。对于分区表,只收集索引信息,不会收集表和列信息。

可以在将METHOD_OPT参数设置为“FOR ALL HIDDEN COLUMNS SIZE N”来收集函数索引的索引表达式信息。



Oracle根据下列条件来决定使用哪些索引:

索引中的记录数;

索引中不同键值的数量;

索引的层数;

索引中的叶块数;

聚集因子;

每个键值平均叶块数;

如果两个索引的选择性、查询代价和集势都相同,那么优化器会根据索引名称的字母顺序选