我一直在阅读有关收集Oracle数据库的表和索引统计信息的一些内容,但这让我感到困惑。
为了论证,我们假设Oracle 11gR2是RDBMS。关于收集表和索引统计信息,何时应该这样做,哪个是首选方法,Oracle是否真的自动为我们收集必要的统计信息?
关于第一点:何时应该完成。我已经读过,根据经验,自从上次表格修改(插入,更新等)约10%的表记录后,应该收集表和索引统计数据。分析了。
关于第二点:这是首选方式。如果我们想要计算表和索引统计信息,是否使用默认选项执行DBMS_STATS.GATHER_TABLE_STATS,假设表没有分区,是否足够?
关于第三点:Oracle是否真的为我们自动收集了必要的统计信息。如果是这种情况,我是否应该担心收集表统计数据(见第1点和第2点)?
提前致谢。
编辑:在ammoQ的评论之后,我意识到这个问题并不清楚用例的真正含义。我的问题是关于那些没有的表格。 "操作"通过用户的动作,即手动,而不是通过通常由数据库作业运行的过程。以我的例子为例。我的ETL过程每天加载几个表,并在大约1小时内完成。在那1小时中,大约一半用于分析表格本身。因此,在插入或更新之后,每天分析表格区域。这似乎有点矫枉过正,因此这个问题。
答案 0 :(得分:2)
通常,您需要具有代表性(不一定准确)的统计数据,并为您提供正确的执行计划。默认情况下,Oracle将在夜间批处理窗口期间运行统计信息收集作业。对于某些应用程序来说这可能没问题,但是如果你有一个数据仓库,可能包括一个常规的数据加载过程,那么管理统计数据应该是该过程的一部分。请注意,我说过“管理”而不是“收集”统计数据。这只是我的方式,除了收集统计数据之外,还有统计数据的其他选项,尽管收集统计数据将是我开始的地方。 还有一些事情可以用来优化统计数据收集,例如增量统计。 非常重要的另一件事是在收集统计数据时使用AUTO Sample大小。不要指定百分比,甚至不指定100%。原因是自动样本大小允许在不使用AUTO样本大小时禁用许多内部优化和功能。
所以,采取你的具体要点
我希望这是有道理和有帮助的。