我很困惑,因为没有为许多模式中的某些表收集统计信息。 这些表已经在上一次夜间进行了分析,我认为它是由已启用的作业自动优化器统计工作完成的。 我在尝试通过接收手动收集统计数据时意识到这一点:
ora-20005 object statistics are locked
在Tuning Advisor下令收集长时间运行查询的统计信息。
什么可能锁定此统计信息?可以默认禁用吗?我认为没有人这样做,因为从长远来看,这种行为没有任何好处。
经过一番研究后,我找到了部分答案: https://blogs.oracle.com/optimizer/entry/maintaining_statistics_on_large_partitioned_tables
我还发现通过每晚运行的分区程序锁定分区表的统计信息,有一行:
dbms_stats.lock_table_stats(...)
我不知道是好还是坏?我想前段时间它很好但是从Oracle 11g起它根本就没有意义。 我将尝试使用增量统计维护(docs)来介绍方法,而不是禁用全球统计收集,我认为这是废弃的想法......
答案 0 :(得分:5)
为什么你相信“它完全没有意义”?
锁定统计数据既不好也不坏。这一切都取决于你为何锁定它们。据推测,过去有人发现了某种锁定统计数据的问题。您需要找出问题是什么以及它是否仍然是一个问题。例如,如果您有包含大量临时数据的表,您可能希望在表相对满时收集统计信息并锁定统计信息,以便在表大多数为空时导致自动统计信息收集作业不会意外运行当表满时,非常昂贵的表扫描。
如果正在解决的问题是收集分区表上的全局统计信息很慢,那么可能使用增量统计信息维护将是一个更好的解决方案。但是,鉴于增量统计维护不是默认行为,考虑“弃用”的替代方法是不正确的。特别是当您拥有满足您需求的现有解决方案时。