分类: Oracle
2008-05-17 14:30:49
dbms_stats
1. 使用取样来做statistics的收集
如果没有设置取样,那么收集统计数据需要全表扫描和整个数据库表的排序。取样最小化了收集统计数据的所需资源。
Estimate_percent参数用来设置取样值。Oracle公司建议设置estimate_percent参数为dbms_stats.auto_sample_size来最大化性能并获得所需的统计数据的准确度。Auto_sample_size让oracle判断用于好的统计数据所需的最好的取样尺寸,根据对象的统计数据的属性。
例如
EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS('OE',DBMS_STATS.AUTO_SAMPLE_SIZE);
2. 并发统计数据的收集
使用DEGREE来指定dbms_stats的并发度。并发统计数据的收集可以和sample一同使用。Oracle建议设置DEGREE参数为dbms_stats.auto_degree。这就是让oracle根据对象的尺寸和并发有关的init.ora参数设置来选择一个合适的并发度。
3.在分区对象上的统计数据
对于分区表和分区索引,DBMS_STATS能为每个分区收集分别的统计数据,能为整个表或索引收集全局统计数据。被收集的分区统计数据的类型在GRANULARITY参数来指定。
4.Column统计数据和直方图
当在表上收集统计数据的时候,DBMS_STATS收集表的字段的数据分布的信息。关于数据分布的最基本的信息就是字段中的最大值和最小值。但是,如果字段中的数据是skewed,统计数据的level对于优化器的需求就不足了。对于skewed数据分布,直方图也能被创建,用来作为column统计数据来描述指定字段的数据分布。
直方图使用method_opt来指定。Oracle建议设定method_op为for all columns size auto。有了这设定,oracle自动判断哪一个字段需要直方图,每个直方图的bucket的数量。
5.判断陈旧的统计数据
为了判断数据库对象是否需要新的统计数据,oracle提供一个表监控工具。当statistics_level=typical或all时,监控被开启。监控追踪表自从上次统计数据被收集以来,表被insert,update,delete的近似值,还有表是否被truncate。表的变化信息可以查看user_tab_modifications视图。随着数据修改,当oracle移植信息到视图的时候,可能会有几分钟的迟延。DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO过程来立即反映在内存中显著的监控信息。
当options参数被设置为gather stale或gather auto ,Gather_database_stats或gather_schema_stats过程使用旧的统计数据来收集新的统计数据。如果监控表的已经被修改了超过10%,那么这些统计数据被认为是旧的,需要再次被收集。
6.用户自定义统计数据
你能创建用户定义的优化器统计数据来支持用户定义的索引和函数。当你把统计数据类型和column或domain索引联系起来时,oracle 以统计数据类型来call统计数据收集方法,无论何时统计数据被收集。
你在创建一个基于函数的索引之后,收集表上的新字段的统计数据,允许oracle来为表达式收集字段统计数据相等信息。通过带有method_opt=’for all hidden columns’来call收集统计数据的过程