禁用统计信息自动更新的原因?

Alp*_*pha 13 sql-server configuration index-statistics

我刚刚了解到,我工作的一家客户公司决定关闭其某些 SQL Server 的自动更新统计选项,并且 DBA 在性能问题出现时手动排除故障。

然而,这种对我来说没有意义。为什么要阻止更新统计信息?

Sim*_*rts 11

我的建议:

  • 将“自动更新统计信息”保持打开状态(直到您遇到一个很好的理由不这样做) - 您不希望在一天中间进行大量删除以在下次运行维护之前放弃查询计划。
  • 但是,请在安静的时间安排索引维护/更新统计信息sp_updatestats将为您更新数据库中所有表的所有统计信息,但这也会导致存储过程重新编译,因此请谨慎选择您的时间(即sp_updatestats在您的月末报告之前可能不是最佳选择)。

你多久需要运行维护索引/重新统计取决于你的数据库负载,你的数据是具体怎么经常被修改(即INSERT/ UPDATE/ DELETE)。如果您在整个节目中修改数据(即每周批处理的临时表),您可能希望每晚更新统计信息/重新组织索引。如果您的数据比较静态,您可以将其设为每周或每两周一次的时间表。


gbn*_*gbn 7

我只在一个糟糕的应用程序中看到过一次,该应用程序的堆索引很差并且 ETL 很重。
这是垃圾,幸运的是不是我的。

否则,没有理由。

如果您在不适当的时间获取统计信息更新,则意味着您进行了不正确的索引/统计信息维护,或者有大量删除/加载达到阈值。

使用 SQL Server 2005+,您无论如何都可以推迟统计更新。
请参阅“何时使用同步或异步统计更新”

看看他们关注或阅读了什么文章来做出这个选择会很有趣......


mrd*_*nny 7

我关闭自动统计的唯一一次是当我使用一些未记录的命令来创建一些虚假的统计信息时,我不希望系统在加载数据时将其清除。这是一个非常边缘的情况。


小智 5

在旧的 (SQL Server 2000) 中,当 SQL 决定进行统计更新时,启用自动更新统计设置可能会导致 OLTP 应用程序中出现大量“暂停”。

从 SQL Server 2005 开始,有一个异步选项,当统计数据过期并随后重新编译时,它不会导致“暂停”。统计信息将在下次需要时异步重新编译。

但请记住,需要平衡 - 对于大型数据集,您可能希望当前查询考虑最新的统计信息,因为查询可能会因低效的查询计划而花费指数级更长的时间。

您还可以使用SQL Server 发布的perfmon计数器监控每秒重新编译的数量和其他关键性能指标,正如他们所说,证据就在布丁中。