共计 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 行业资讯频道!