關於dbms_stats對系統統計資訊的管理

suifeng2316發表於2013-03-13
oracle收集統計資訊主要方法是analyze命令和dbms_stats系統包。
--analyze命令已經過時
– 無法提供靈活的分析選項
– 無法提供並行的分析
– 無法對分析資料進行管理
--DBMS_STATS
– 專門為CBO提供資訊來源
– 可以進行資料分析的多種組合
– 可以對分割槽進行分析
– 可以進行分析資料管理
• 備份,恢復,刪除,設定....
不能收集行遷移,行遷移需要使用analyze
analyze table productuser.supplymessage validate structure cascade;
--11g 新增功能
1,Oracle11g的一個預設設定,
2,user_tab_modification跟蹤表的修改
3,當分析物件的資料修改超過10%時,Oracle會重新分析。,
4,定時任務GATHER_STATS_JOB負責重新定時收集過舊資料的資訊。
--分析scheme
Exec dbms_stats.gather_schema_stats( 
ownname => 'scott', 
options => 'GATHER AUTO', 
estimate_percent => dbms_stats.auto_sample_size, 
method_opt => 'for all indexed columns ', 
degree => 6 ) 
--分析表
begin
   dbms_stats.gather_table_stats(ownname => 'productuser',tabname => 'work_list',estimate_percent => 10,method_opt=> 'for all indexed columns') ; 
end;
--分析索引
begin
   dbms_stats.gather_index_stats(ownname => 'productuser',indname => 'xxx',estimate_percent => '10',degree => '4') ;
end;
--鎖定表的統計資訊
begin
dbms_stats.lock_table_stats(ownname => 'productuser',tabname =>'SJ_PRODUCT');
END;
--解除鎖定
begin
dbms_stats.unlock_table_stats(ownname => 'productuser',tabname =>'SJ_PRODUCT');
END;
--查詢表是否鎖定統計資訊,查詢 user_tab_statistics
select * from user_tab_statistics a where a.STATTYPE_LOCKED is not null;
--STATTYPE_LOCKED
--如何使用dbms_stats分析統計資訊?
--建立統計資訊歷史保留表 
begin
  dbms_stats.create_stat_table(ownname => 'productuser',stattab => 'stat_tableofproduct') ; 
end;
--匯出整個scheme的統計資訊 
begin
   dbms_stats.export_schema_stats(ownname => 'productuser',stattab => 'stat_tableofproduct') ; 
end;
--刪除表的統計資訊
begin
  dbms_stats.delete_table_stats(ownname => 'productuser',tabname => 'product') ;
end;
select * from user_tables where table_name='PRODUCT'
--匯入錶的歷史統計資訊
begin
   dbms_stats.import_table_stats(ownname => 'productuser',tabname => 'product',stattab => 'stat_tableofproduct') ; 
end;
--如果進行分析後,大部分表的執行計劃都走錯,需要導回整個scheme的統計資訊
begin
   dbms_stats.import_schema_stats(ownname => 'productuser',stattab => 'stat_tableofproduct');
end;
--匯入索引的統計資訊
begin
   dbms_stats.import_index_stats(ownname => 'productuser',indname => 'xxx',stattab => 'stat_tableofproduct') 
end;
還有其他使用較少的過程如下:
刪除資料庫統計資訊:delete_database_stats
刪除使用者方案統計資訊:delete_schema_stats
刪除表統計資訊:delete_table_stats
刪除索引統計資訊:delete_index_stats
刪除列統計資訊:delete_column_stats 
設定表統計資訊:set_table_stats
設定索引統計資訊:set_index_stats
設定列統計資訊:set_column_stats 

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

相關文章