何时更新统计信息?

Oni*_*ght 47 performance sql-server maintenance statistics

我继承了执行以下操作的维护计划:

  • 清理旧数据
  • 检查数据库完整性
  • 执行数据库和事务日志备份
  • 重组我们的索引
  • 更新统计
  • 删除旧备份和维护计划文件

在 23 分钟的维护计划中,更新统计数据需要惊人的 13 分钟。在这 13 分钟期间,对数据库的访问被阻止(或者至少,从这个数据库到我们其他数据库的复制被暂停)。

我的问题是:

我们应该什么时候更新统计数据,为什么?

这似乎是我们应该比每天少做的事情。我试图让我们摆脱“仅仅因为”进行不必要维护的心态。

Tho*_*ger 29

如果您没有维护窗口,那么每天更新统计数据可能有点过头了。 特别是如果您为数据库打开了自动更新统计信息。在您的原始帖子中,您说用户看到由于此维护计划而导致的性能下降。没有其他时间来运行这个维护计划了吗?没有其他窗口?我看到你的计划包括索引重组,你什么时候重建索引?当该操作发生时,统计信息会自动更新(前提是没有为索引关闭)。

您应该多久更新一次统计信息在很大程度上取决于您的索引和数据正在接收多少数据修改。如果对数据的修改很少 ( INSERT, UPDATE, DELETE),那么您可能有一个更不频繁的更新统计作业计划。

确定您的统计数据是否过时的一种方法是查看执行计划,如果您估计的行与返回的实际行有很大差异,那么这很好地表明需要增加间隔。在你的情况下,你走的是另一条路,可能需要进行一些试验。每周更新统计数据,如果您开始看到陈旧统计数据的明显迹象,请从那里开始。

如果您对数据库使用自动更新统计信息,请参阅此参考以了解何时更新统计信息的阈值。

  • @Onion-Knight 然后,当您重建索引时,您还会每周更新一次统计信息。如果您在整个数据库中进行全面索引重建,这可能就足够了。 (5认同)

Amm*_*arR 26

何时更新统计信息?

当且仅当自动更新统计功能不足以满足您的要求时。我的意思是,如果自动创建和自动更新统计信息处于开启状态,并且由于统计信息不准确或不最新,您得到了一个糟糕的查询计划,那么控制统计信息的创建和更新可能是一个好主意。但如果您对 sql server 性能和查询执行时间满意。

那么我建议停止维护计划中更新统计命令

更新统计信息很重要且有用 1. 允许 SQL Server 查询优化器一致地生成良好的查询计划,同时保持较低的开发和管理成本 2. 查询优化器使用统计信息来估计表达式的选择性,从而估计中间的大小和最终查询结果。3. 好的统计可以让优化器准确评估不同查询计划的成本,进而选择高质量的计划


如果您想手动更新统计信息,您应该首先知道统计信息何时自动更新

如果 SQL Server 查询优化器需要对自上次创建或更新统计信息以来经历了大量更新活动的表中的特定列进行统计,SQL Server 会通过对列值进行采样来自动更新统计信息(通过使用自动更新统计信息) . 统计信息自动更新由查询优化或编译计划的执行触发,它只涉及查询中引用的列的子集。如果 AUTO_UPDATE_STATISTCS_ASYNC 为 OFF,则在查询编译之前更新统计信息

这里有一些很好的文章,它们讨论了在 SQL Server 中何时触发更新统计信息

  1. 来自简单的谈话第 13 节。何时触发统计数据的自动更新?
  2. support.microsoft部分:自动确定 Autostats
  3. msdn.microsoft部分:在 SQL Server 2008 中维护统计信息

知道何时触发统计信息后,它将帮助您决定何时手动更新统计信息

要了解有关统计及其对性能的影响的更多信息,我在 sqlskills非常好的博客和博主中推荐BrentOzarKimberly