1、不同数据库版本的缺省设置:
1)estimate_percent的缺省值:
9i: 100%
10g: DBMS_STATS.AUTO_SAMPLE_SIZE(使用非常小的估算百分比)
11g:DBMS_STATS.AUTO_SAMPLE_SIZE(100%)
2) METHOD_OPT:defaults:
9i: "FOR ALL COLUMNS SIZE 1",等同于没有列值的具体分布信息。
10g and11g:“FOR ALL COLUMNS SIZE AUTO"。
设置成AUTO意味着如果histogram的存在会有助于生成更准确的执行计划,DBMS_STATS会自动在需要的字段上生成它。
在11g中,AUTO_SAMPLE_SIZE的缺省值是100%,从而尽可能使统计信息是准确的。在之前的版本上,由于时间的制约,100%的sample size有时候是不可能的,由于11G实施了一个新的hash算法避免了传统的排序(在9i和10g典型慢的部分是排序),这显著的减少了收集的时间并提升了资源使用效率。同样,是否收集列上的统计信息也是自动决定的。
2、快速重建统计信息的推荐步骤:
为快速删除和重建某张表及它的索引的统计信息(包含非均匀分布列的统计信息):
exec dbms_stats.delete_table_stats(ownname=>'user_name',
tabname=>'table_name',cascade_indexes=>true);
exec dbms_stats.gather_table_stats(ownname=>'user_name',
tabname=>'table_name',
estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE,
cascade=>true,
method_opt=>'for all columns size AUTO');
3、统计信息收集命令的几种情况
a、收集表的统计信息
exec dbms_stats.gather_table_stats(
ownname=>'schema_name',
tabname=>'table_name',
estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE,
cascade=>true,
method_opt=>'FOR ALL COLUMNS SIZE AUTO');
b、收集某一schema下的所有对象的统计信息
exec dbms_stats.gather_schema_stats(
ownname=>'schema_name',
cascade=>true,
method_opt=>'FOR ALL COLUMNS SIZE AUTO');
C、收集database中所有对象的统计信息
exec dbms_stats.gather_database_stats(
cascade=>true,
method_opt=>'FOR ALL COLUMNS SIZE AUTO');
禁用自动统计信息收集作业
begin
dbms_auto_task_admin.disable
(client_name=>'auto optimizer stats collection',
operation=>null,
window_name=>null);
end;
/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22969361/viewspace-1123840/
,如需转载,请注明出处,否则将追究法律责任。