利用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

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