dbms_stats收集统计信息时的默认参数

利用dbms_stats来收集统计信息的时候,其procedure有很多参数是有默认值的。9i的默认值是直接写死在procedure的定义中,而10g的默认值则是一组可以由用户设置的参数值,为此,10g的dbms_stats引入了两个新的procedure:get_param和set_param。

$ORACLE_HOME/rdbms/admin/dbmsstat.sql里可以看到gather_table_stats过程的具体参数默认值如下:

9i:

procedure gather_table_stats
    (ownname varchar2, 
     tabname varchar2, 
     partname varchar2 default null,
     estimate_percent number default null, 
     block_sample boolean default FALSE,
     method_opt varchar2 default 'FOR ALL COLUMNS SIZE 1',
     degree number default null,
     granularity varchar2 default 'DEFAULT',
     cascade boolean default FALSE,
     stattab varchar2 default null, 
     statid varchar2 default null,
     statown varchar2 default null,
     no_invalidate boolean default FALSE);

10g:

procedure gather_table_stats
    (ownname varchar2, 
     tabname varchar2, 
     partname varchar2 default null,
     estimate_percent number default to_estimate_percent_type(get_param('ESTIMATE_PERCENT')),
     block_sample boolean default FALSE,
     method_opt varchar2 default get_param('METHOD_OPT'),
     degree number default to_degree_type(get_param('DEGREE')),
     granularity varchar2 default get_param('GRANULARITY'),
     cascade boolean default to_cascade_type(get_param('CASCADE')),
     stattab varchar2 default null, statid varchar2 default null,
     statown varchar2 default null,
     no_invalidate boolean default to_no_invalidate_type(get_param('NO_INVALIDATE')),
     stattype varchar2 default 'DATA',
     force boolean default FALSE);

可以看到,10g的procedure定义里,有些default值是通过get_param来获取的,这些默认值可以通过set_param进行修改。

SQL> select 'cascade:' as param,dbms_stats.get_param('cascade') as value from dual
  2  union all
  3  select 'degree:',dbms_stats.get_param('degree') from dual
  4  union all
  5  select 'estimate_percent:',dbms_stats.get_param('estimate_percent') from dual
  6  union all
  7  select 'method_opt:',dbms_stats.get_param('method_opt') from dual
  8  union all
  9  select 'no_invalidate:',dbms_stats.get_param('no_invalidate') from dual
 10  union all
 11  select 'granularity:',dbms_stats.get_param('granularity') from dual;

PARAM             VALUE
----------------- ------------------------------
cascade:          DBMS_STATS.AUTO_CASCADE
degree:           NULL
estimate_percent: DBMS_STATS.AUTO_SAMPLE_SIZE
method_opt:       FOR ALL COLUMNS SIZE AUTO
no_invalidate:    DBMS_STATS.AUTO_INVALIDATE
granularity:      AUTO

6 rows selected.

这些可以修改的参数可取的值,可以参考dbmsstat.sql里的注释和Metalink文档:Doc ID:725845.1



无觅相关文章插件,快速提升流量

2条评论

  • At 2009.02.22 01:22, 如何收集及删除列的统计信息 said:

    […] 上一篇:dbms_stats收集统计信息时的默认参数 […]

    • […] 值得注意的是,从上一篇文章我们知道,9i的dbms_stats中,method_opt的默认值是FOR ALL COLUMNS SIZE 1,也就是收集列的基本统计信息而不收集柱状图信息,而10g的默认值则变成了FOR ALL COLUMNS SIZE AUTO,则Oracle在收集列的基本信息之外,还会根据情况收集某些列的柱状图。 (adsbygoogle = window.adsbygoogle || []).push({}); This entry was posted in 数据库 and tagged oracle by admin. Bookmark the permalink. […]


      (Required)
      (Required, will not be published)