`exec sp_updatestats`命令有什么副作用?

时间:2017-07-18 05:54:35

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

  

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

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

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

1 个答案:

答案 0 :(得分:3)

嗯,根据文档,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调用。