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


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

在23分钟的维护计划中,更新统计信息需要花费惊人的13分钟。在这13分钟内,数据库访问被阻止(或至少从该DB到我们其他数据库的复制已暂停)。

我的问题是:我们正在更新统计信息,为什么?

这似乎是我们每天应该减少的工作频率。我正试图让我们摆脱不必要的维护的“思维定式”。

评论

多久/如何插入/更新/删除任何行?对我来说,这是决定性因素。

@JNK我们每天在整个数据库中插入约70,000行。每月更新约100行。

1-如果我们通过TABLE知道多少行,而2-以百分比表示,则更相关。每天在1m的表中有70k行与500m的表有很大不同

我建议使用ola.hallengren.com/之类的东西。此解决方案只能重建/重组和更新所需的内容,这样可以缩短维护计划所需的时间,并节省大量日志空间。

#1 楼

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

您应该多长时间更新一次统计信息,很大程度上取决于索引和数据的修改量。接收。如果对数据的修改很少(INSERTUPDATEDELETE),那么更新统计信息作业的时间表就很少了。

找出统计信息是否陈旧的一种方法是查看执行计划,如果您估算的行与实际返回的行有很大差异,那么这很好地表明需要增加间隔。在您的情况下,您将采用另一种方式,可能需要进行一些试验。每周更新统计信息,如果您开始发现过时的统计数据的迹象,那就从那里去。

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

评论


我们每周重建一次索引。

–洋葱骑士
2012年6月12日在16:03

@ Onion-Knight然后,当您重建索引时,您还将每周更新一次统计信息。如果您要在整个数据库中进行覆盖索引重建,那可能就足够了。

–托马斯·斯金格
2012年6月12日17:54

#2 楼

什么时候更新统计信息?

当且仅当自动更新统计信息功能不足以满足您的要求时。
我的意思是,如果自动创建和自动更新统计信息处于启用状态,并且您遇到了麻烦查询计划,因为统计信息不准确或不最新,因此控制统计信息的创建和更新可能是一个好主意。 br />然后我建议从维护计划中停止Updates Statistics命令。

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


如果要手动更新统计信息,则应首先知道何时更新统计信息自动

如果SQL Server查询优化器需要自上次创建或更新统计信息以来已进行了大量更新活动的表中特定列的统计信息,则SQL Server会通过对列值(通过使用自动更新统计信息)。统计信息自动更新是通过查询优化或执行已编译的计划来触发的,它仅涉及查询中引用的列的子集。如果AUTO_UPDATE_STATISTCS_ASYNC设置为OFF,则在查询编译之前更新统计信息
simple-talk第13节。何时触发自动更新到统计信息?

support.microsoft部分:自动确定统计信息
msdn.microsoft部分:知道何时触发统计信息后,在SQL Server 2008中维护统计信息

它将帮助您决定何时更新统计信息手动

,以了解有关统计信息及其对性能的影响的更多信息,我建议sqlskills中的BrentOzar和Kimberly非常好的博客和博主。