oracle 11g統計資訊收集

dingzihan發表於2014-03-18
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部落格 ” ,連結:http://blog.itpub.net/22969361/viewspace-1123840/,如需轉載,請註明出處,否則將追究法律責任。

相關文章