exec sp_updatestats是做什么的?

36

sp_updatestats是用来更新SQL Server数据库中统计信息的存储过程,它有助于优化查询性能。可以在生产环境中运行该存储过程,但在高负载时间或其他关键时间段最好避免执行。

2个回答

40

sp_updatestats 会更新数据库中所有表的所有统计信息,只要有一行发生了更改。它使用默认采样,意味着它不会扫描表中的所有行,因此可能会产生比其他选项更不准确的统计信息。

如果您具有包括“重建索引”在内的维护计划,则它也会刷新统计信息,但它更准确,因为它扫描了所有行。在重建索引后没有必要重新构建统计信息。

使用update statistics 命令手动更新特定的统计对象或表可以使您对过程有更好的控制。如果要自动化它,请看看这里

自动更新仅在优化器决定必须时才触发。2012 年发生了数学变化:<2012年,每500+表行数变化20%时,会触发自动更新;在2012年+中,它是 SQRT(1000×表行数)。这意味着在大表上更频繁。当然,临时表的行为不同。

总之,sp_updatestats 实际上可能会造成更多的损害,是最不推荐的选项。


+1 修正了我的一个误解。我以为 sp_updatestats 的工作原理和自动更新统计信息的工作原理相同(即20%的更改)。谢谢! - Ben Thul
15
@dean,我对你关于此事后果的担忧很感兴趣。 "可能会造成更多的损害而不是好处,这是最不推荐的选择。"——似乎唯一的问题是它可能会做你的维护计划已经做的事情,或者效率低下,但如果另一种选择是一个响应不良的SQL服务器实例,那么这些问题有多大呢? - Adam

0
这是真的,如果你用1%的采样(或更少)替换全扫描统计数据。
然而,在大数据加载之后,最重要的事情通常是直方图的边缘,而这些边缘是通过sp_updatestats更新的。
所以不要忽视它的使用,特别是因为它运行非常快。它可以在某些数据仓库加载中挽救一天。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接