【DB笔试面试648】在Oracle中,当自动收集任务运行时,哪些对象会被收集?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/lihuarongaini/article/details/101443704

640?wx_fmt=gif

题目 部分

在Oracle中,当自动收集任务运行时,哪些对象会被收集?

     

答案部分

存在缺失和陈旧的统计信息的表、索引和分区会被收集。当自动收集任务运行时,优先收集缺失统计信息的对象,然后再收集陈旧统计信息的对象。可以从DBA_TAB_STATISTICSDBA_IND_STATISTICS这两个视图中查询缺失或陈旧统计信息的对象。“LAST_ANALYZED IS NULL”表示统计信息缺失,“STALE_STATS='YES'”表示统计信息陈旧。当表或分区的数据变化量超过10%时,该对象的统计信息变为陈旧。

Oracle 11g中对统计信息自动收集的功能进行了加强。在Oracle 10g中,如果表中变更的行数(字典表SYS.MON_MODS_ALL$中记录的INSERT+UPDATE+DELETE的总数)超过表的总行数(SYS.TAB$中记录的目标表总记录数)的10%时或自上次自动统计信息收集作业完成之后目标表被执行过TRUNCATE操作,那么该表的统计信息就变为陈旧状态,Oracle就会在指定时间段自动收集统计信息。在Oracle 10g中,这个10%STALE_PERCENT)是无法修改的,如果表非常大,那么10%其实是非常多的数据,这就造成统计信息不准确。在Oracle 11g中,这个10%STALE_PERCENT)是可以修改的,分为全局(DBMS_STATS.SET_GLOBAL_PREFS)、数据库级别(DBMS_STATS.SET_DATABASE_PREFS)、用户级别(DBMS_STATS.SET_SCHEMA_PREFS)和表级别(DBMS_STATS.SET_TABLE_PREFS)。其中,数据库级别和用户级别都是调用表级别的存储过程DBMS_STATS.SET_TABLE_PREFS来对表进行设置的。

表级别的设定如下所示:

修改为5%(范围从1-100):EXEC DBMS_STATS.SET_TABLE_PREFS(USER,'TB_NAME','STALE_PERCENT',5);

恢复为10%EXEC DBMS_STATS.SET_TABLE_PREFS(USER,'TB_NAME','STALE_PERCENT',NULL);

查询表百分比:SELECT DBMS_STATS.GET_PREFS('STALE_PERCENT',USER,'TB_NAME') FROM DUAL;

查询全局百分比:SELECT DBMS_STATS.GET_PREFS('STALE_PERCENT') FROM DUAL;

本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

640?wx_fmt=gif

---------------优质麦课------------

640?wx_fmt=png

详细内容可以添加麦老师微信或QQ私聊。

640?wx_fmt=gif

About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:618766405

 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

640?wx_fmt=gifDBA宝典

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

640?wx_fmt=gif

640?wx_fmt=gif

640?wx_fmt=png

猜你喜欢

转载自blog.csdn.net/lihuarongaini/article/details/101443704