千家信息网

Oracle 11g如何修改表级别的自动收集统计信息比率

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,小编给大家分享一下Oracle 11g如何修改表级别的自动收集统计信息比率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在
千家信息网最后更新 2024年09月22日Oracle 11g如何修改表级别的自动收集统计信息比率

小编给大家分享一下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如何修改表级别的自动收集统计信息比率"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

信息 统计 数据 比率 级别 篇文章 内容 查询 不怎么 全局 大部分 时间 更多 查询表 用户 百分 百分比 知识 范围 行业 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华师网络安全培训 微信清粉软件开发 网络技术 国家三级 含金量 上海期智研究院机房服务器采购 网络安全方面投入多少 服务器agent版本怎么看 广西大学数据库原理 数据库安全性包括哪几个 广州圆心网络技术 武威凉州服务器数据恢复门店 软件开发后台维护工资 学习网络安全开发 我的世界纯生存最牛的服务器 服务器配置与管理 ppt 数据库技术与应用教学方法 企业内部网络安全管理 武汉壹加软件开发 服务器上的cpu能用台式电脑吗 密码编码学与网络安全期末复习 数据库写入的同时读取 深圳志和互联网科技有限 干软件开发的人很忙吗 网络安全工程师大专可以考吗 怎么从数据库 成立网络安全领导小组办公室 学习计算机网络技术有用吗 沈阳区块链软件开发 云易袋互联网科技有限公司 哪些一本大学网络安全专业 打车软件开发用到那些软件
0