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


13

我刚刚了解到,我工作的一家客户公司决定关闭某些SQL Server的“自动更新统计信息”选项,并由DBA手动对出现的性能问题进行故障排除。

但是,这种方式对我来说毫无意义。为什么要阻止统计信息被更新?

Answers:


11

我的建议:

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

您需要多久运行一次索引维护/重建统计信息,具体取决于数据库负载,尤其是数据修改的频率(即INSERT/ UPDATE/ DELETE)。如果您要修改整个节目的数据(即每周批处理的临时表),则可能要每晚更新统计信息/重新组织索引。如果您的数据比较静态,则可以每周或每两周进行一次调度。


7

我只在一个不良的应用程序中看到过一次,该应用程序的索引索引不好并且ETL很大。
这是垃圾,幸运的是不是我的。

否则,没有理由。

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

使用SQL Server 2005+,您仍然可以延迟统计信息更新。
请参阅“何时使用同步或异步统计信息更新”

看到他们关注或读了哪些文章以做出这一选择很有趣...


这可能是一个遗留问题吗?统计维护在2k中是否有所不同?
JNK

@JNK:IIRC对行更改阈值进行了一些更改,但是我必须查找它...啊,是的,现在是按列而不是按表进行跟踪msdn.microsoft.com/en-us/library/ms190283.aspx
gbn

是2008年的20%吗?
JNK


20%+ 500> 500每列因为SQL服务器2005+
GBN

7

我唯一关闭自动状态的时间是当我使用一些未记录的命令来创建一些虚假的状态时,我不希望系统在加载数据时消失。这是一个非常好的案例。


5

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

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

请记住,尽管有一个平衡点-对于大型数据集,您可能希望当前查询考虑最新的统计信息,因为效率低下的查询计划可能使查询花费的时间成倍增加。

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


4

系统有多活跃?

如果它们主要是读取系统,那么您可能无需更新就可以解决问题,如果它们在更改数据(插入,更新,删除)时碰巧手动执行此操作。

但是,出于最佳实践的考虑,建议您保持原样,因为我认为它很少会成为性能问题。我可能会向他们发送文章和博客文章,建议将其保留。金伯利·特里普(Kimberly Tripp)有一些不错的选择。


4

尽管我绝不会以任何方式与MrDenny发生冲突(也不会故意)(过分尊重他的知识和对社区的贡献),但我注意到MS文档建议关闭自动更新统计信息。

MS建议在存储和SQL Server容量规划和配置(SharePoint Server 2010)中将其设置为关闭。

我也阅读了MS对于SP的早期版本的相同建议,但暂时找不到链接。

但是我不是SP专家DBA,因此您可能还想检查一下MS Permier现场工程师Chun Liu在SharePoint上的Chun Liu上要说些什么,或者只是忽略此帖子并保留它。


5
您的建议特定于SharePoint数据库,通常不适用于所有SQL Server安装。
Simon Righarts 2011年

0

通常只有在可以自行更新的情况下,才将其关闭。我一直都这样做,因为我们需要比自动统计信息更好或不同的采样。那是相当普遍的,但是您不会简单地将其关闭而不做其他任何事情。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.