更新统计信息实际上降低了性

我有一个生产数据库每夜sp_updatestats,似乎工作正常,除了一个特定的存储过程遇到性能问题后更新。

开发团队目前正在修复proc(一些新的索引和一些我推荐的查询的重组),但目前唯一的解决方法是做一个

UPDATE STATISTICS [SuperGiantTable] WITH FULLSCAN 

所以,问题是,我可以强制sp_ updatestats做“与fullscan”选项? 我想要吗? 如果没有,那么我可能只是将这个上面的UPDATE STATISTICS命令添加到sp_updatestats之后立即运行。

SQL 2000,顺便说一句。

正如KPWINC所说:“这真的取决于”。

还有几个项目影响你的问题的答案,一般的答案可能不合适。

Microsoft MSDN具有sp_updatestats条目( http://msdn.microsoft.com/en-us/library/aa260337(SQL.80).aspx )和“更新统计信息”( http://msdn.microsoft.com/en- us / library / aa260645(SQL.80).aspx )

首先回答你最后的问题:

您需要重新读取SQLServerPedia条目。 特别:

您的索引重build将自动更新索引的统计信息(100%的样本量通常比使用sp_updatestats时更好)。 索引重build完成后,您可以使用sp_updatestats更新需要注意的其他统计信息 (2005+)。

查看UPDATE STATISTICS(2000)文档说明如下:

注意默认行为是在目标表或索引视图上执行示例扫描。 SQL Server自动计算所需的样本大小

Kimberly Tripp在统计,索引和数据库维护计划( http://www.sqlskills.com/BLOGS/KIMBERLY/category/Statistics.aspx )上汇集了一些博客条目。 尽pipe信息可能会或可能不会被您直接使用,但是每个博客条目的指导应该是这样的,被引用的网站可能会有所帮助。

这真的取决于…

有多less个数据库?

数据库有多大?

多less活动?

sp_updatestats(默认情况下)以默认采样率更新统计信息。 您可以尝试使用resample选项,但只有在自上次更新统计信息(自动更新也使用默认采样率)以来没有发生过自动更新的情况下才能使用。

重build索引时,统计信息会进行全面扫描更新,大多数人在索引重build后会看到良好的性能。

只有极less数情况下,人们才能closures自动统计function。 我会build议把它打开。

有一个适当的时间间隔(取决于每个表的数据修改模式)运行的作业,并使用全面扫描或其他高采样率进行手动统计更新。

一般我会走,如下所示:

如果它是一个大的数据库 – 每小时事务日志备份。

– 每日差异备份 – 每日碎片整理 – 每日更新统计。

– 每周重build一次。 – 每周完整备份一次。

很大程度上取决于数据库和事务。

还有一点需要注意的是,自动计算的采样率可能会导致生成的直方图和密度vector不能正确地解决您可能存在的数据歪斜问题,而这恰好是该数据歪斜的操作。

您是否知道采样统计信息更新和全面扫描统计信息更新之间的查询计划之间的区别?

另一件事 – 小心维护计划,重build索引,然后更新那些相同的统计数据,作为重build的副作用更新 – 你可以结束WORSE统计,如果你刚刚离开重build更新统计单独。

谢谢