11g掛起釋出統計資料

安佰勝發表於2011-12-01

11g掛起釋出統計資料
 
==============
 
11g之前,收集統計資訊,如analyze或者使用dbms_stats包後收集到的統計資訊會立即生效
11g中預設也是這樣
不過可以通過設定可以不自動釋出統計資訊
這樣在不知新的統計資訊是否對系統有幫助的情況下先進行測試
之後確定有幫助之後再發布
 
--------------
 
--檢視預設統計資訊釋出方式
--true為自動釋出,false為掛起方式
SQL> select dbms_stats.get_prefs('publish') from dual;
DBMS_STATS.GET_PREFS('PUBLISH')
--------------------------------------------------------------------------------
TRUE
 
--對錶進行分析
--收集統計資訊
SQL> analyze table an.at compute statistics;
Table analyzed.

--確認收集到的統計資訊
SQL> select table_name,last_analyzed,num_rows from dba_tables where wner='AN' and  table_name='AT';
TABLE_NAME                     LAST_ANALYZED         NUM_ROWS
------------------------------ ------------------- ----------
AT                             2011-12-01 11:44:06          0

--設定an使用者下表at的統計資訊釋出方式為掛起釋出
--反向操作將false改為true即可
SQL> exec dbms_stats.set_table_prefs('an','at','publish','false');
PL/SQL procedure successfully completed.

--確認an使用者下表at的統計資訊釋出方式
--false為掛起方式,true為自動釋出
SQL> select dbms_stats.get_prefs('publish','an','at') from dual;
DBMS_STATS.GET_PREFS('PUBLISH','AN','AT')
--------------------------------------------------------------------------------
FALSE
 
--再次對錶進行分析
--收集統計資訊
SQL> analyze table an.at compute statistics;
Table analyzed.
 
--從dba_tables中確認到已經發布的統計資訊沒有發生改變
--證明當前對錶an.at統計資訊的收集方式修改生效
SQL> select table_name,last_analyzed,num_rows from dba_tables where wner='AN' and  table_name='AT';
TABLE_NAME                     LAST_ANALYZED         NUM_ROWS
------------------------------ ------------------- ----------
AT                             2011-12-01 11:44:06          0
 
--對於掛起統計資訊表的查詢要在dba_tab_pending_stats中進行
--查詢結果為剛剛進行的分析時間
SQL> select table_name,last_analyzed,num_rows from dba_tab_pending_stats  where wner='AN' and  table_name='AT';
TABLE_NAME                     LAST_ANALYZED         NUM_ROWS
------------------------------ ------------------- ----------
AT                             2011-12-01 11:45:52          0
 
--手動釋出掛起的統計資訊
--使優化程式能夠認到
SQL>  exec dbms_stats.publish_pending_stats('AN','AT');
PL/SQL procedure successfully completed.
 
--確認之前掛起的統計資訊已經發布
SQL> select table_name,last_analyzed,num_rows from dba_tables where wner='AN' and  table_name='AT';
TABLE_NAME                     LAST_ANALYZED         NUM_ROWS
------------------------------ ------------------- ----------
AT                             2011-12-01 11:45:52          0

 
--刪除掛起統計資訊
SQL> exec dbms_stats.delete_pending_stats('AN','AT')
PL/SQL procedure successfully completed.
SQL> select table_name,last_analyzed,num_rows from dba_tab_pending_stats  where wner='AN' and  table_name='AT';
no rows selected
 
--刪除當前使用者下所有表的掛起統計資訊
--將delete改為publish即為釋出
SQL> exec dbms_stats.delete_pending_stats('AN',null)
PL/SQL procedure successfully completed.
 
--刪除全庫表的掛起統計資訊
--將delete改為publish即為釋出
SQL> exec dbms_stats.delete_pending_stats(null,null)
PL/SQL procedure successfully completed.
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13177610/viewspace-712536/,如需轉載,請註明出處,否則將追究法律責任。

相關文章