如何使用dbms stats分析統計資訊?

2021-04-21 23:05:16 字數 2518 閱讀 3188

dbms_stats是oracle8i新增的程式包,它使統計資料的生成和處理更加方便,很多人都在推薦使用dbms_stats替代analyze,我倒是不怎麼用過,記錄一下

estimate_percent --估算抽樣百分比

method_opt:for table --只統計表 for all indexed columns --只統計有索引的表列 for all indexes --只分析統計相關索引

--建立統計資訊歷史保留表

sql> exec dbms_stats.create_stat_table(ownname => 'scott',stattab => 'stat_table') ;

pl/sql procedure successfully completed

--匯出整個scheme的統計資訊

sql> exec dbms_stats.export_schema_stats(ownname => 'scott',stattab => 'stat_table') ;

pl/sql procedure successfully completed

--分析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 )

--分析表

sql> exec dbms_stats.gather_table_stats(ownname => 'scott',tabname => 'work_list',estimate_percent => 10,method_opt=> 'for all indexed columns') ;

pl/sql procedure successfully completed

--分析索引

sql> exec dbms_stats.gather_index_stats(ownname => 'crm2',indname => 'idx_adm_permission_pid_mid',estimate_percent => '10',degree => '4') ;

pl/sql procedure successfully completed

--如果發現執行計畫走錯,刪除表的統計資訊

sql>dbms_stats.delete_table_stats(ownname => 'scott',tabname => 'work_list') ;

pl/sql procedure successfully completed

--匯入表的歷史統計資訊

sql> exec dbms_stats.import_table_stats(ownname => 'scott',tabname => 'work_list',stattab => 'stat_table') ;

pl/sql procedure successfully completed

--如果進行分析後,大部分表的執行計畫都走錯,需要導回整個scheme的統計資訊

sql> exec dbms_stats.import_schema_stats(ownname => 'scott',stattab => 'stat_table');

pl/sql procedure successfully completed

--匯入索引的統計資訊

sql> exec dbms_stats.import_index_stats(ownname => 'crm2',indname => 'idx_adm_permission_pid_mid',stattab => 'stat_table')

--檢查是否匯入成功

sql> select table_name,num_rows,a.blocks,a.last_analyzed from all_tables a where a.table_name='work_list';

table_name num_rows blocks last_analyzed

work_list 4005 186 2007-10-12 15

sql>

analyze和dbms_stats不同的地方:

analyze是同時更新表和索引的統計資訊,而dbms_stats會先更新表的統計資訊,然後再更新索引的統計資訊,這裡就有乙個問題,就是當表的統計資訊更新後,而索引的統計資訊沒有被更新,這時候cbo就有可能選擇錯誤的plan

參考:

講解DBMS STATS的分析表與備份分析資訊

在使用dbms stats分析表的時候,我們經常要儲存之前的分析,以防分析後導致系統效能低下然後進行快速恢復。首先建立乙個分析表,該表是用來儲存之前的分析值 sql begin 2 dbms stats.create stat table ownname test stattab stat tabl...

講解DBMS STATS的分析表與備份分析資訊

在使用dbms stats分析表的時候,我們經常要儲存之前的分析,以防分析後導致系統效能低下然後進行快速恢復。首先建立乙個分析表,該表是用來儲存之前的分析值 sql begin 2 dbms stats.create stat table ownname test stattab stat tabl...

如何使用strace pstack利器分析程式效能

引言 有時我們需要對程式進行優化 減少程式響應時間。除了一段段地對 進行時間複雜度分析,我們還有更便捷的方法嗎?若能直接找到影響程式執行時間的函式呼叫,再有針對地對相關函式進行 分析和優化,那相比漫無目的地看 效率就高多了。將strace和pstack工具結合起來使用,就可以達到以上目的。strac...