Oracle自动收集统计数据&;失真的统计信息

Oracle自动收集统计数据&;失真的统计信息,oracle,object,statistics,Oracle,Object,Statistics,从Oracle11g开始,GATHER_STATS_作业不再有效,已被“AutoOptimizer STATS collection”取代 此作业假定在“维护窗口”期间运行,并收集已更改10%或以上或具有过时统计信息的对象的统计信息。如果这是真的,那么为什么当我运行检查“stale_stats='YES'”的查询时,仍然会得到对象 也许我不明白这项工作是如何执行的……有两种可能 随着表格的更改,Oracle在一天中定期将“dba_”选项卡中的“过时”统计信息更新为“是”。今天早上收集统计数据时,

从Oracle11g开始,GATHER_STATS_作业不再有效,已被“AutoOptimizer STATS collection”取代

此作业假定在“维护窗口”期间运行,并收集已更改10%或以上或具有过时统计信息的对象的统计信息。如果这是真的,那么为什么当我运行检查“stale_stats='YES'”的查询时,仍然会得到对象


也许我不明白这项工作是如何执行的……

有两种可能

  • 随着表格的更改,Oracle在一天中定期将“dba_”选项卡中的“过时”统计信息更新为“是”。今天早上收集统计数据时,一张表的更改量完全可能低于阈值,而在今天进行了一些更改后,
    stale_stats
    会在一天中变为“是”

  • 根据作业运行时有多少对象具有过时的统计信息,以及这些表包含的数据量、维护窗口有多大以及服务器的功能有多强大,统计作业可能必须先中止,然后才能重新收集所有过时的统计信息。如果作业被中止,该中止将记录在作业历史记录中。如果发生这种情况是因为某一天发生了大量更改(例如,您运行了一个年度清除过程,从数据库中的几乎每个表中删除了大量数据),那么陈旧的统计信息将在几天的统计作业运行过程中被更新,直到作业赶上


  • 值得一看的好建议。:)