2017-07-18 377 views
1

超时expired.The超时时间已过的 操作完成之前或在服务器未响应`exec sp_updatestats`命令的副作用是什么?

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

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

+0

你在哪里执行你的查询,在你的客户端applivation?所有你需要的是配置另一个超时 – sepupic

回答

3

那么,根据文档,sp_updatestats当你运行它时会做某些事情。

sp_updatestats执行UPDATE STATISTICS,通过指定ALL关键字,对数据库中的所有用户定义的和内部表。 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中调用。