Oracle 11g系統自動收集統計資訊的一些知識
在11g之前,當表的資料量修改超過總資料量的10%,就會晚上自動收集統計資訊,如何判斷10%,之前的帖子有研究過:Oracle自動統計資訊的收集原理及實驗。這個STALE_PERCENT=10%,是無法修改的,如果表非常大,10%是非常多的資料,非常有可能造成統計資訊不準確。
在11g之後,STALE_PERCENT=10%是可以修改的,分為全域性(DBMS_STATS.SET_GLOBAL_PREFS )和表級別(DBMS_STATS.SET_TABLE_PREFS)。表級別的設定:
修改為5%(範圍從1-100): exec dbms_stats.set_table_prefs(null,'table_name','STALE_PERCENT',5);
恢復為10%: exec dbms_stats.set_table_prefs(null,'table_name','STALE_PERCENT',null);
查詢百分比:select dbms_stats.get_prefs('STALE_PERCENT',null,'table_name') from dual;
---11g的是 週一到週五 22:00-2:00 週六週日 6:00-4:00
SELECT w.window_name, w.repeat_interval, w.duration, w.enabled
FROM dba_autotask_window_clients c, dba_scheduler_windows w
WHERE c.window_name = w.window_name
AND c.optimizer_stats = 'ENABLED';
WINDOW_NAME REPEAT_INTERVAL DURATION
-------------------- ------------------------------------------------------------ ---------------
SUNDAY_WINDOW freq=daily;byday=SUN;byhour=6;byminute=0; bysecond=0 +000 20:00:00
FRIDAY_WINDOW freq=daily;byday=FRI;byhour=22;byminute=0; bysecond=0 +000 04:00:00
WEDNESDAY_WINDOW freq=daily;byday=WED;byhour=22;byminute=0; bysecond=0 +000 04:00:00
SATURDAY_WINDOW freq=daily;byday=SAT;byhour=6;byminute=0; bysecond=0 +000 20:00:00
THURSDAY_WINDOW freq=daily;byday=THU;byhour=22;byminute=0; bysecond=0 +000 04:00:00
TUESDAY_WINDOW freq=daily;byday=TUE;byhour=22;byminute=0; bysecond=0 +000 04:00:00
MONDAY_WINDOW freq=daily;byday=MON;byhour=22;byminute=0; bysecond=0 +000 04:00:00
--禁用自動收集
exec DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
--啟用自動收集
exec DBMS_AUTO_TASK_ADMIN.ENABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
--檢視job
select client_name,status from dba_autotask_client;
CLIENT_NAME STATUS
---------------------------------------------------------------- --------
auto optimizer stats collection ENABLED
auto space advisor ENABLED
sql tuning advisor ENABLED
--收集當前資料庫下所有使用者的統計資訊
exec dbms_stats.gather_database_stats(user);
--收集當前資料庫使用者下所有物件的統計資訊
exec dbms_stats.gather_schema_stats(user);
--收集資料字典的統計資訊
exec dbms_stats.gather_dictionary_stats();
--當系統有很大的分割槽表時,如果總是全部收集則會比較慢,11g之後可以設定INCREMENTAL只對資料有變動的分割槽做收集
exec dbms_stats.set_table_prefs(user,'table_name','INCREMENTAL','TRUE');--只收集資料變動的分割槽
exec dbms_stats.set_table_prefs(user,'table_name','INCREMENTAL','FALSE');--都要收集
select dbms_stats.get_prefs('INCREMENTAL',null,'table_name') from dual;--檢視分割槽表INCREMENTAL的值
--獲取global的統計資訊收集設定選項
select dbms_stats.get_prefs('method_opt') from dual;
select dbms_stats.get_prefs('concurrent') from dual;
select dbms_stats.get_prefs('GRANULARITY') from dual;
select dbms_stats.get_prefs('INCREMENTAL') from dual;
--設定global的統計資訊收集選項
exec DBMS_STATS.SET_PARAM('DEGREE',4);
exec DBMS_STATS.SET_PARAM('INCREMENTAL','TRUE');
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20893244/viewspace-2155346/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [統計資訊系列7] Oracle 11g的自動統計資訊收集Oracle
- Oracle收集統計資訊Oracle
- 【統計資訊】Oracle常用的收集統計資訊方式Oracle
- 手動收集——收集統計資訊
- Sqlserver關於統計資訊自動建立自動更新的知識點SQLServer
- Oracle統計資訊的收集和維護Oracle
- 啟用與禁用統計資訊自動收集
- oracle 統計資訊檢視與收集Oracle
- Oracle運維指令碼-收集統計資訊Oracle運維指令碼
- oracle 11g 系統審計功能Oracle
- 【統計資訊】Oracle統計資訊Oracle
- 收集統計資訊方案
- 最佳實踐:解讀GaussDB(DWS) 統計資訊自動收集方案
- ORACLE19c新特性-實時統計資訊收集Oracle
- 收集全庫統計資訊
- 微課sql最佳化(3)、統計資訊收集(2)-如何收集統計資訊SQL
- ORACLE表統計資訊與列統計資訊、索引統計資訊Oracle索引
- GreatSQL統計資訊相關知識點SQL
- 【TUNE_ORACLE】定製化收集統計資訊SQL參考OracleSQL
- 修改oracle 的統計資訊Oracle
- 6 收集資料庫統計資訊資料庫
- Win10系統關閉“小娜自動收集個人資訊”功能的方法Win10
- 管理資訊系統川大972 | 管理資訊系統全書知識點總結
- 實驗室資訊管理系統(LIMS)知識大全
- 資訊系統專案管理師-必背的知識點專案管理
- NLPIR系統自動構建企業上市大資料知識圖譜大資料
- Oracle 統計資訊介紹Oracle
- NLPIR系統自動構建公共安全知識圖譜
- 作業系統併發的一些知識點梳理作業系統
- 微課sql最佳化(8)、統計資訊收集(6)-統計資訊查詢SQL
- 1. 資訊系統建設-知識結構梳理
- Kafka訊息系統基礎知識索引Kafka索引
- 裝置漏油檢測識別系統 漏油自動識別系統
- 統計資訊記錄表|全方位認識 mysql 系統庫MySql
- 【ASK_ORACLE】Oracle如何恢復舊的統計資訊Oracle
- NLPIR系統自動構建知識圖譜核查招標檔案
- Oracle 11g dg broker自動failoverOracleAI
- 系統日誌及資料庫相關資訊收集資料庫