【问题标题】:What are the side effects of `exec sp_updatestats` command?`exec sp_updatestats` 命令的副作用是什么?
【发布时间】:2017-07-18 05:54:35
【问题描述】:

超时时间已过。超时时间在完成之前已过 操作或服务器没有响应

执行查询时出现超时错误。我从谷歌和stackoverflow搜索了一些解决方案。有些人建议使用exec sp_updatestats 执行命令来解决问题,但有些人建议避免使用exec sp_updatestats 命令。

exec sp_updatestats 命令的副作用是什么?

【问题讨论】:

  • 在客户端应用程序中,您在哪里执行查询?您所需要的只是配置另一个超时

标签: sql-server sql-server-2008 sql-server-2012


【解决方案1】:

好吧,根据文档,sp_updatestats 在您运行它时会做一些事情。

sp_updatestats 通过指定 ALL 关键字对数据库中所有用户定义的表和内部表执行 UPDATE STATISTICS。 sp_updatestats 显示指示其进度的消息。更新完成后,它会报告所有表的统计信息都已更新。 sp_updatestats 更新禁用的非聚集索引的统计信息,并且不更新禁用的聚集索引的统计信息。

对于基于磁盘的表,sp_updatestats根据sys.dm_db_stats_properties目录视图中的modification_counter信息只更新需要更新的统计信息,从而避免不必要的统计信息更新在未更改的行上。执行 sp_updatestats 时,始终会更新内存优化表的统计信息。因此,不要执行过多的 sp_updatestats

sp_updatestats 可以触发存储过程或其他已编译代码的重新编译。但是,sp_updatestats 可能不会导致重新编译,前提是对于所引用的表及其上的索引只有一个查询计划是可能的。在这些情况下,即使更新了统计信息,也无需重新编译。

对于兼容级别低于 90 的数据库,执行 sp_updatestats 不会保留特定统计信息的最新 NORECOMPUTE 设置。对于兼容级别为 90 或更高的数据库,sp_updatestats 确实保留了特定统计信息的最新 NORECOMPUTE 选项。

要解决您不应在存储过程中调用此函数的超时错误,您应该使用执行计划调查该查询中发生了什么以及瓶颈是什么。创建缺失的索引,然后再次查看执行计划。

应该偶尔从维护计划中调用该函数,而不是从您的 udfs 的 sps 中调用。

【讨论】:

    猜你喜欢
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多