收集統計資訊方案
總體設想:儘量把分析表可能消耗的資源和對系統的影響降到最低
方案:對需要分析的表執行監控,然後定期分析oracle認為需要分析的表
主要用到DBMS_JOB+SP,重點在於既保證分析結果的準確性,又不會太影響業務的運轉。
實現過程很簡單……
總體設想:儘量把分析表可能消耗的資源和對系統的影響降到最低
方案:對需要分析的表執行監控,然後定期分析oracle認為需要分析的表
一、對沒有監控的表新增監控
注意:只需要監控需要的使用者下的表,千萬不能對系統表進行監控
需要注意地方:
對monitoring狀態下的表,對錶進行分析後,該表就會從user_tab_modifications檢視中刪除,知道對該表有新的DML操作。
user_tab_modifications會有幾分鐘的延遲時間,如果需要即時得到已經被修改,但仍未重新整理到user_tab_modifications的記錄數,則需要執行過程:DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;
二、分析沒有統計資訊的表
三、重新分析修改量超過10%的表
四、定義作業
每週日凌晨定時執行:
var v_job number;
begin
dbms_job.submit(:v_job,'p_monitor_and_stat(''suk'');',trunc(sysdate,'DY'),'trunc(sysdate,''DY'')+7');
end;
儲存過程如下:
create or replace procedure p_monitor_and_stat(sname Varchar2) Is
/*
作用:對某個使用者下的表進行監測、分析
作者:suk
*/
l_monitor_cmd varchar2(500);--sql for table monitoring
l_stat_empty Varchar2(500);--sql for gather empty-statistics table
l_stat_stale Varchar2(500);--sql for gather stale-statistics table
cursor c1 Is select 'alter table '||owner||'.'||table_name||' monitoring' col1
from all_tables
where
owner in (upper(sname))
and monitoring='NO'
and table_name not like 'MLOG$_%'
and table_name not like 'RUPD$%'
and temporary='N';--get the table list that need to be analyzed
begin
for c1_rec in c1 loop
l_monitor_cmd:=c1_rec.col1;
begin
execute immediate l_monitor_cmd;
exception when others Then
dbms_output.put_line('ERROR => '||sqlerrm||' '||sqlcode||' for statement :'||l_monitor_cmd);
end;
/* 迴圈收集各表的統計資訊,其中一個表出錯不會影響其他表的收集*/
end loop;
dbms_output.put_line('monitoring table complete');
/*重新整理已經在sga中被修改,但沒有重新整理到user_tab_modifications的記錄數到user_tab_modifications的記錄數中,
避免在執行本過程前一小段時間內發生大量DML操作,但不能及時更新到user_tab_modifications的情況
*/
DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;
dbms_output.put_line('flush complete');
/*收集沒有分析過的表的統計資訊*/
l_stat_empty:='begin dbms_stats.gather_schema_stats(ownname=>'''||sname||''',options=>''gather empty''); end;';
Execute Immediate l_stat_empty;
dbms_output.put_line('gather empty compelete');
/*重新分析修改量超過10%的表(這些修改包括插入、更新和刪除)*/
l_stat_stale:='begin dbms_stats.gather_schema_stats(ownname=>'''||sname||''',options=>''gather stale'');end;';
Execute Immediate l_stat_stale;
dbms_output.put_line('gather stale compelete');
end p_monitor_and_stat;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63696/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 手動收集——收集統計資訊
- Oracle收集統計資訊Oracle
- 【統計資訊】Oracle常用的收集統計資訊方式Oracle
- 收集全庫統計資訊
- 微課sql最佳化(3)、統計資訊收集(2)-如何收集統計資訊SQL
- 6 收集資料庫統計資訊資料庫
- 最佳實踐:解讀GaussDB(DWS) 統計資訊自動收集方案
- oracle 統計資訊檢視與收集Oracle
- [統計資訊系列7] Oracle 11g的自動統計資訊收集Oracle
- Oracle統計資訊的收集和維護Oracle
- Oracle運維指令碼-收集統計資訊Oracle運維指令碼
- 微課sql最佳化(8)、統計資訊收集(6)-統計資訊查詢SQL
- 啟用與禁用統計資訊自動收集
- ORACLE19c新特性-實時統計資訊收集Oracle
- 資訊收集
- 【TUNE_ORACLE】定製化收集統計資訊SQL參考OracleSQL
- Nebula Graph 特性講解——RocksDB 統計資訊的收集和展示
- 【統計資訊】Oracle統計資訊Oracle
- MySQL對所有表收集統計資訊(Python 2指令碼)MySqlPython指令碼
- ORACLE表統計資訊與列統計資訊、索引統計資訊Oracle索引
- GUI程式設計--班級資訊收集系GUI程式設計
- GUI程式設計--班級資訊收集系..GUI程式設計
- 微課sql最佳化(2)-為什麼需要收集統計資訊SQL
- 收集 Kubernetes 資源統計資料的新工具
- 內網資訊收集內網
- 資訊收集流程
- 資訊收集11——nmap
- Linux本地資訊收集Linux
- Oracle 11g系統自動收集統計資訊的一些知識Oracle
- GUI程式設計--班級資訊收集系6.3GUI程式設計
- 系統日誌及資料庫相關資訊收集資料庫
- [20200819]12c Global Temporary table 統計資訊的收集的疑問.txt
- Linux常用資訊收集命令Linux
- kali常用的資訊收集
- 微課sql最佳化(7)、統計資訊收集(5)-關於直方圖SQL直方圖
- 網路安全中資訊收集是什麼?資訊收集分為哪幾類?
- 【統計資訊】全面檢視錶所有統計資訊SQLSQL
- 【統計資訊】如何備份和還原統計資訊