统计信息采集实施策略

来源:互联网 发布:佩里西奇 数据 编辑:程序博客网 时间:2024/06/09 12:40

 

 

     定制设计信息采集方案,可考虑如下实施策略。

 

  (1)根据数据库规模和数据变化情况,可考虑在数据库、schema、表、分区表等不同级别采集统计信息

  (2)设置并行度,提高统计信息采集的效率

  (3)进行统计信息采集的目的是保证执行路径的最优化。因此,不一定需要全面采集统计信息,只要执行路径达到最优化,可设定采集率参数estimate_percent

  (4)重点对最消耗资源的SQL语种所涉及表的进行统计信息采集

  (5)采集表统计信息时,同时采集索引统计信息

  (6)对分区表可考虑只对指定分区进行统计信息采集。包括设置granularity=>'PARTITION'

  (7)考虑block_sample=>true,method_opt=>'FOR ALL INDEXED' columns等参数,从而提高采样准确性,并减少不必要的统计信息,降低资源消耗

  (8)只对没有统计信息或过期统计信息的表进行采集,即options=>'GATHER EMPTY',或options=>'GATHER STALE'

  (9)对于字段值分布很畸形(skewed)的表,进行数据分布统计.

  (10)合理使用10g统计信息采集方面的新特性

  (11)编写统计信息采集工作的脚本

 

 统计信息采集具体方法

   Oracle提供了丰富的统计信息采集方法。

  

 (1)数据库级信息采集

      建议数据库规模较小、数据变化比较大,而且时间和资源充裕的系统,在整个数据库级采集统计信息。例如:

  exec dbms_stats.gather_database_stats(estimate_percent=>10,degree=>8,cascade=>true,granularity => 'ALL');

   (2)schema信息采集

exec dbms_stats.gather_schema_stats(ownname=>'CLAS',estimate_percent=>10,degree=>8,cascade=>true,granularity => 'ALL');

 

   (3)表级统计信息采集

建议对数据量较大、数据变化也比较大的表,在表级进行统计信息采集。例如:

exec dbms_stats.gather_table_stats(ownname=>'CLAS',tabname=>'表名',estimate_percent=>10,degree=>8,cascade=>true,granularity => 'ALL');

   (4)分区级统计信息采集

建议对数据量较大、数据变化也比较大的分区表,在分区级进行统计信息采集,特别是只采集数据变化较大的分区。例如:

  exec dbms_stats.gather_table_stats

  (ownname=>'CLAS',tablename=>'表名',partname='分区名',estimate_percent=>10,degree=>8,cascade=>true,granularity => 'PARTITION'

  ,method_opt=>' FOR ALL INDEXED COLUMNS');

 

 

   (5)数据字典统计信息采集

 

 

 exec dbms_stats.gather_dictionary_stats

(estimate_percent=>100,degree=>8,cascade=>true,granularity => 'ALL');

 

 

   (6)动态性能表统计信息采集

exec dbms_stats.gather_fixed_objects_stats;

 

   (7)硬件统计信息采集

 

  exec dbms_stats.gather_system_stats('START');

 

在典型业务结束之后,执行如下语句:

 

  exec dbms_stats.gather_system_stats('STOP');

 

 

 

注:它也是通过AWR进行采集的。