我们通常使用 Ola Hallengren 的解决方案来处理我们拥有的索引优化作业中的更新统计信息。作为标准做法,我们将它安排在所有服务器(1500+)的每个星期日午夜。
现在,有几台服务器在一周中出现很多性能问题,当因性能问题引发事件时,我们会为该特定数据库运行 sp_updatestats。我们有一个巨大的环境,所有版本都在使用,从 2000 到 2016。在 2012 和 2014 版本中,我们一直在周中手动运行特定数据库的更新统计信息。
最近,由于反复出现的问题,我们还不得不为一些非常活跃的数据库每天安排 sp_updatestats。
我的问题:
- 我们应该多久安排一次?
- 过于频繁地安排它有什么缺点?
- 有没有办法避免定期更新运行如此频繁的缺点,因为我听说编译需要更多时间并且可能会在一段时间内降低性能?
请帮助我了解您在这方面的经验。
我们应该多久安排一次?
您需要自己决定。
过于频繁地安排它有什么缺点?
Kendra Little 在
UPDATE STATISTICS
: The Secret IO Explosion中解释了如何更有效地执行相同操作的一些技巧。有没有办法避免定期更新并行运行的缺点?
如果您的意思是并行运行更新统计信息,我建议您注意两件事。
根据您对第 3 个问题的编辑,我建议您阅读Auto Update Stats Async Enabled。
其他资源:
sp_updatestats
Erin Stellato避免的另一个原因索引重组 (ALTER INDEX REORG) 不会像索引重建那样更新统计信息,而单个索引重建 (ALTER INDEX myIndex REBUILD) 只会更新该索引的统计信息。
如果您正在执行索引重组(基于碎片百分比等),您需要将其与更新统计信息过程结合起来,至少对于那些在索引重组中未更新统计信息的索引(检查 sys. dm_db_stats_properties):