共計 3089 個字符,預計需要花費 8 分鐘才能閱讀完成。
丸趣 TV 小編給大家分享一下 Oracle 11g 如何修改表級別的自動收集統計信息比率,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
在 11g 之前,當表的數據量修改超過總數據量的 10%,就會晚上自動收集統計信息。
這個 STALE_PERCENT=10%,是無法修改的,如果表非常大,10% 是非常多的數據,非常有可能造成統計信息不準確。
統計信息收集窗口時間:
11g 的是 周一到周五 22:00-2:00 周六周日 6:00-2: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
在 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;
查詢表的當前統計信息收集比率:
SQL select dbms_stats.get_prefs(STALE_PERCENT ,null, S) from dual;
DBMS_STATS.GET_PREFS(STALE_PERCENT ,NULL, S)
——————————————————————————–
10
SQL select to_char(LAST_ANALYZED, yyyy-mm-dd hh34:mi:ss) from DBA_TAB_STATISTICS where OWNER = ENTER and TABLE_NAME = S
TO_CHAR(LAST_ANALYZ
——————-
2017-09-10 00:26:10
SQL select * from dba_tab_modifications where table_name= S and TABLE_OWNER= ENTER
TABLE_OWNER TABLE_NAME
—————————— ——————————
PARTITION_NAME SUBPARTITION_NAME INSERTS
—————————— —————————— ———-
UPDATES DELETES TIMESTAMP TRU DROP_SEGMENTS
———- ———- ——— — ————-
ENTERPRISE S
360773
280456 0 03-OCT-17 NO 0
SQL SELECT s.table_name,s.num_rows,s.last_analyzed FROM dba_tables s where s.owner= ENTER and s.table_name= S
TABLE_NAME NUM_ROWS LAST_ANAL
—————————— ———- ———
S 29907073 10-SEP-17
可以看到 S 表有 29907073 行數據, INSERT 360773 行,UPDATE 280456 行數據,因為表的數據量大,10% 是非常多的數據,非常有可能造成統計信息不準確。
于是修改為 1%。
進入指定用戶下進行修改:
SQL conn ENTER/XXX;
Connected.
SQL exec dbms_stats.set_table_prefs(null, S , STALE_PERCENT ,1);
PL/SQL procedure successfully completed.
SQL select dbms_stats.get_prefs(STALE_PERCENT ,null, S) from dual;
DBMS_STATS.GET_PREFS(STALE_PERCENT ,NULL, S)
——————————————————————————–
1
S 表的統計信息收集比率改成了 1%。
以上是“Oracle 11g 如何修改表級別的自動收集統計信息比率”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!