oracle 数据统计收集,Oracle 10g收集数据库统计信息
1.需求概述
某數據庫由于整體統計信息不準確,多次出現部分業務SQL選錯執行計劃,從而導致性能下降影響到最終用戶體驗,目前通過SQL_PROFILE綁定執行計劃臨時解決,但此方法不夠靈活,后續維護工作量也會增加。
Oracle優化器(CBO)依賴數據庫統計信息來計算目標SQL各種可能的執行路徑的成本,并從中選擇一條成本值最小的執行路徑來作為目標SQL的執行計劃。如果統計信息不準確甚至是錯誤,會導致優化器選擇錯誤SQL執行計劃的概率大大增加。
目前計劃對該數據庫統計信息進行重新收集,因為生產環境的復雜性,不排除重新收集正確的統計信息后,整體性能反而下降的情況。故而在收集之前需要對原有的統計信息做好備份,如發現收集后性能反而下降的極端情況,也可以快速回退到原有的統計信息。
2.實施步驟
2.1備份當前數據庫統計信息
備份當前數據庫的統計信息,建議備份后再導出一份留存:
--備份當前數據庫的統計信息:
begin
DBMS_STATS.CREATE_STAT_TABLE('SYSTEM','DB_STATS_20190118');
DBMS_STATS.EXPORT_DATABASE_STATS(STATTAB => 'DB_STATS_20190118', STATOWN => 'SYSTEM');
end;
/
--備份后再導出一份留存
expdp \'/ as sysdba\' directory=DATA_PUMP_DIR dumpfile=stats.dmp logfile=stats.log tables=system.db_stats_20190118
2.2收集數據庫統計信息
收集數據庫的統計信息,需要在業務閑時操作:
--開啟計時
set timing on
--開始收集全庫統計信息
begin
dbms_stats.gather_database_stats(
ESTIMATE_PERCENT=>DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'for all indexed columns', cascade=>true, degree=>16);
end;
/
注意:degree的值并不是設置越高就越快,同時要根據實際CPU具體情況來設置。
如果數據庫是11.2.0.2及以上版本,還可以通過DBMS_STATS.SET_GLOBAL_PREFS設置并發收集進一步提升收集效率,具體可參考:
3.回退方案
3.1正常回退
收集統計信息后發現性能大幅下降,正常回退,直接將原統計信息導入:
--正常回退,直接將原統計信息導入:
exec DBMS_STATS.IMPORT_DATABASE_STATS (STATTAB => 'DB_STATS_20190118', STATOWN => 'SYSTEM');
3.2其他情況
如果DB_STATS_20190118被損壞,可以刪除后使用之前的備份導入:
--刪除DB_STATS_20190118:
exec DBMS_STATS.DROP_STAT_TABLE ('SYSTEM','DB_STATS_20190118');
--使用之前的備份導入DB_STATS_20190118:
impdp \'/ as sysdba\' directory=DATA_PUMP_DIR dumpfile=stats.dmp logfile=stats.log
總結
以上是生活随笔為你收集整理的oracle 数据统计收集,Oracle 10g收集数据库统计信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 隐藏oracle数据库,如何隐藏Orac
- 下一篇: php求数组的长度的函数,php如何计算