超时已到期。完成之前已经过了超时时间 操作或服务器没有响应
执行查询时出现超时错误。我从谷歌和stackoverflow搜索了一些解决方案。有人建议使用exec sp_updatestats
执行命令来解决问题,但有些人建议避免使用exec sp_updatestats
命令。
exec sp_updatestats
命令的副作用是什么?
答案 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调用。