【问题标题】:Oracle SQL table and index statisticsOracle SQL 表和索引统计
【发布时间】:2017-03-02 12:37:29
【问题描述】:

我一直在阅读有关在 Oracle 数据库上收集表和索引统计信息的内容,但这让我……感到困惑。

为了争论,我们假设 Oracle 11gR2 作为 RDBMS。关于收集表和索引的统计信息,应该什么时候完成,这是首选的方式,Oracle真的会自动为我们收集必要的统计信息吗?

关于第一点:什么时候做。我读过,根据经验,自上次分析表以来,大约 10% 的表记录已被修改(插入、更新等)后,才应收集表和索引统计信息。

关于第二点:这是首选的方式。如果我们想计算表和索引的统计信息,假设表没有分区,使用默认选项执行 DBMS_STATS.GATHER_TABLE_STATS 就足够了吗?

关于第三点:Oracle 真的会自动为我们收集必要的统计信息吗?如果是这种情况,我不应该担心收集表统计信息(参见第 1 点和第 2 点)吗?

提前致谢。

编辑:ammoQ 的评论之后,我意识到这个用例的真正含义并不清楚,在这里。我的问题是关于通过用户操作(即手动操作)而不是通过通常由数据库作业运行的程序“操作”的表。以我为例。我的 ETL 流程每天加载几个表,大约需要 1 小时。在这 1 个小时中,大约一半用于分析表格本身。因此,在插入或更新之后,每天都会分析表格区域。这似乎有点矫枉过正,因此提出了问题。

【问题讨论】:

  • 何时应该完成:至少,当您注意到查询优化器选择了错误的计划时。 ;-)
  • 感谢您的评论。我已经澄清了这个问题。
  • 收集表统计自动任务:asktom.oracle.com/pls/asktom/…

标签: oracle oracle11g


【解决方案1】:

一般来说,您需要具有代表性(不一定准确)的统计数据,并为您提供正确的执行计划。默认情况下,Oracle 将在每晚批处理窗口中运行统计信息收集作业。这对某些应用程序来说可能没问题,但如果您有一个数据仓库,其中可能包括常规数据加载过程,那么管理统计数据应该是该过程的一部分。请注意,我说的是“管理”而不是“收集”统计数据。这只是我的说法,除了收集统计数据之外,还有其他统计选项,尽管收集统计数据将是我开始的地方。 还有一些事情可以用来优化统计信息收集,例如增量统计信息。 非常重要的另一件事是在收集统计数据时使用自动样本大小。不要指定百分比,甚至不是 100%。原因是自动样本大小启用了许多内部优化和功能,如果您不使用自动样本大小,这些优化和功能就会被禁用。

所以,拿你的具体观点

  1. 10% 陈旧度是相当随机的,只是自动统计使用的一个数字。
  2. 具有默认值的dbms_stats.gather_table_stats() 首选方法。我可能会更改的一个参数是 DEGREE,以启用并行收集统计数据
  3. 在 12c 中,基本统计信息在加载到空表(或空分区)时收集。统计信息是在创建索引时建立在索引上的。因此,重申我上面所说的,统计数据收集应该是您的 ELT 流程的一部分。

我希望这是有道理的并有所帮助。

【讨论】:

  • 感谢您的回答,@BobC。最困扰我的是收集统计数据是我的 ETL 过程中最耗时的部分。就像我在原始帖子的最后一次编辑中所说的那样,ETL 过程本身所消耗的时间大约有一半用于收集统计数据。对于具有(数千万)数百万行的最大表尤其如此。我会尝试不同级别的 DEGREE,看看我是否可以挤出任何宝贵的时间。
  • @DylanW80 你有什么硬件?即你有多少 CPU 内核和多少(观察到的)IO 带宽?我不会只收集索引列的统计信息;你需要所有的统计数据。您是加载到空表中还是已经填充?你的 10M 行表分区了吗?
  • 不幸的是,我并不真正了解数据库所在硬件的详细信息。根据经验,我只知道它相对“快”。该表已填充。每天我都会插入前一天的数据。该表未分区。我试过这样做,但我真的没有分区“键”/“策略”(如果有意义的话)
  • 定义“相对快”。你能描述一下你的桌子(用商业术语)吗?如果它没有自然分区键,例如通过分区修剪使查询更快的东西,那么您可以在其上引入 LOAD_KEY 列和分区。然后你可以使用诸如分区交换和增量统计之类的东西。由于您的表没有被分区,随着表大小的增加,您收集的统计信息将变得越来越长。如果您的表是分区的,您只需收集新加载数据的统计信息。这称为增量统计。
  • 最近我不得不更新其中一张表中的 300 万行,其中包含我之前提到的数千万行,并且花了不到 2 分钟(标准更新)。老实说,我不知道这是否足以建立一个快速的基准,但这是我能记住的。我从未听说过 LOAD_KEY 列。我试过谷歌搜索无济于事。您是否有更多信息或相关文献?
猜你喜欢
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多