DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC儲存過程
Automatic Statistics Gathering
在Oracle10g中引入的最佳化器統計資訊(Optimizer Statistics)自動收集,是一個看上去很不錯的功能,但是在實際應用中卻往往沒有起到相應的效果,甚至在某些系統中我們會建議禁用這個功能。
闡述一些該功能的相關知識點。
1. Automatic Statistics Gathering是由Scheduler排程GATHER_STATS_JOB作業來完成的,在GATHER_STATS_JOB作業中則呼叫DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC儲存過程。
2. 該作業在建立資料庫的自動建立,並且設定為每天晚上10點到第二天早上6點和週六週日的全天為執行視窗期。在執行視窗期內,該作業都會執行,根據stop_on_window_close屬性來決定,如在視窗期結束以後,該作業如果還沒有執行完畢,是繼續執行還是結束執行。
3. GATHER_DATABASE_STATS_JOB_PROC是內部的儲存過程,基本上跟DBMS_STATS.GATHER_DATABASE_STATS的功能一樣,但是有內部的優先順序考慮,更新越多的表將會越優先收集統計資訊。
4. 收集統計資訊的表物件是,之前從來沒有收集過的或者是更新的(包括insert,update,delete,truncate)記錄數超過當前總記錄數10%的表。記錄數的更改量由Oracle資料庫自動監控,在初始化引數statistics_level設定為TYPICAL或者ALL時,自動監控即會生效。
5. 在USER_TAB_MODIFICATIONS表中記錄了所有被監控的表的資料量更改資訊。該資訊的更新將會稍微滯後於真實的修改,可以透過DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO儲存過程來立刻將更改的資訊更新到USER_TAB_MODIFICATIONS表中。對於更新之後再rollback的記錄,仍然算為已經受影響的記錄,Oracle不會在rollback之後再去更新USER_TAB_MODIFICATIONS表。
SQL> select * from user_tab_modifications where table_name='EMP';
no rows selected
SQL> select count(*) from emp;
COUNT(*)
----------
14
SQL> update emp set sal=sal+100;
14 rows updated.
SQL> select * from user_tab_modifications where table_name='EMP';
no rows selected
SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO();
PL/SQL procedure successfully completed.
SQL> select inserts,updates,deletes from user_tab_modifications where table_name
='EMP';
INSERTS UPDATES DELETES
---------- ---------- ----------
0 14 0
SQL> rollback;
Rollback complete.
SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO();
PL/SQL procedure successfully completed.
SQL> select inserts,updates,deletes from user_tab_modifications where table_name
='EMP';
INSERTS UPDATES DELETES
---------- ---------- ----------
0 14 0
SQL>
6. 在Oracle10g版本(包括最新的10.2.0.4)中沒有已知的修改10%這個閥值的方法。但是在Oracle11g中則提供了SET_TABLE_PREFS等函式。
以下命令將指定表的STALE預設值從10%改為5%,該值可以從新的dba_tab_stat_prefs資料字典中查詢獲得。
--僅限於Oracle11g版本
BEGIN
DBMS_STATS.SET_TABLE_PREFS ( wnname =>'KAMUS', tabname =>'T1', pname =>'STALE_PERCENT', pvalue =>'5');
END;
/
SQL> select * from dba_tab_stat_prefs;
OWNER TABLE_NAME PREFERENCE_NAME PREFE
---------- ---------- -------------------- -----
KAMUS T1 STALE_PERCENT 5
7. 執行以下命令,可以禁用統計資訊自動收集功能。
BEGIN
DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
END;
/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28389881/viewspace-1436558/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- SQLSERVER儲存過程SQLServer儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- Oracle儲存過程Oracle儲存過程
- JdbcTemplate調儲存過程JDBC儲存過程
- 造數儲存過程儲存過程
- 儲存過程——遊標儲存過程
- 儲存過程 傳 datatable儲存過程
- JAVA儲存過程(轉)Java儲存過程
- MySQL之儲存過程MySql儲存過程
- oracle的儲存過程Oracle儲存過程
- MySQL---------儲存過程MySql儲存過程
- linux呼叫儲存過程Linux儲存過程
- Winform呼叫儲存過程ORM儲存過程
- mysql儲存過程整理MySql儲存過程
- Oracle儲存過程-1Oracle儲存過程
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- mongo 儲存過程詳解Go儲存過程
- Sqlserver中的儲存過程SQLServer儲存過程
- SQL 分頁儲存過程SQL儲存過程
- 原創:oracle 儲存過程Oracle儲存過程
- jsp中呼叫儲存過程JS儲存過程
- 資料庫儲存過程資料庫儲存過程
- mybatis儲存過程返回listMyBatis儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- MySQL儲存過程 (即函式)MySql儲存過程函式
- SqlServer-儲存過程分頁SQLServer儲存過程
- openGauss 支援儲存過程除錯儲存過程除錯
- mySql 儲存過程與函式MySql儲存過程函式
- vertica 如何實現儲存過程?儲存過程
- oracle儲存過程書寫格式Oracle儲存過程