我在生产数据库上有一个夜间 sp_updatestats,它似乎工作正常,除了一个特定的存储过程在更新后遇到性能问题。
开发团队目前正在修复 proc(我推荐的一些新索引和一些查询重组),但目前唯一的解决方法是做一个
UPDATE STATISTICS [SuperGiantTable]
WITH FULLSCAN
所以,问题是,我可以强制 sp_ updatestats 执行“with fullscan”选项吗?我想要吗?如果没有,那么我可能只是在 UPDATE STATISTICS 命令上方添加此命令,以便在 sp_updatestats 之后立即运行。
SQL 2000,顺便说一句。
这真的取决于...
有多少个数据库?
数据库有多大?
多少活动?
sp_updatestats(默认情况下)以默认采样率更新统计信息。您可以尝试使用 resample 选项,但这仅在自上次更新统计信息后未发生自动更新时才有效(自动更新也使用默认采样率)。
重建索引时,统计信息会通过完整扫描进行更新,大多数人在索引重建后会看到良好的性能。
只有在极少数情况下人们才会关闭自动统计功能。我建议将其保持打开状态。
有一个以适当的时间间隔运行的作业(这取决于您对每个表的数据修改模式)并使用全扫描或其他一些高采样率进行手动统计更新。
一般来说,我会如下:
如果它是一个大数据库 - 每小时备份一次事务日志。
-- 每日差异备份。- 每日碎片整理。- 每日更新统计数据。
-- 每周重新索引一次。-- 每周一次完整备份。
很大程度上取决于数据库和事务。
正如 KPWINC 所说,“这真的取决于”。
还有几个项目会影响对您问题的回答,一般回答可能不合适。
Microsoft MSDN 有 sp_updatestats ( http://msdn.microsoft.com/en-us/library/aa260337(SQL.80).aspx ) 和“更新统计”( http://msdn.microsoft.com/en-我们/图书馆/aa260645(SQL.80).aspx )
首先回答您的最后一个问题:
您需要重新阅读 SQLServerPedia 条目。具体来说:
查看 UPDATE STATISTICS (2000) 文档中的抽样说明如下:
Kimberly Tripp 整理了一些关于统计、索引和数据库维护计划的博客文章 ( http://www.sqlskills.com/BLOGS/KIMBERLY/category/Statistics.aspx )。虽然这些信息可能会或可能不会被您直接使用,但每个博客条目的指导应该是有用的,并且引用的站点可能会有所帮助。
要记住的另一件事是,自动计算的采样率可能会导致生成的直方图和密度向量无法正确解释您可能遇到的任何数据倾斜,而存储过程恰好会针对这些数据倾斜。
您知道采样统计信息更新和全扫描统计信息更新后存储过程之间查询计划的区别吗?
另一件事 - 小心维护计划重建索引,然后更新那些作为重建的副作用而更新的相同统计信息 -如果您刚刚离开重建更新统计信息,那么您最终可能会得到更糟糕的统计信息独自的。
谢谢