如果执行时间比先前执行长得多,则T-SQL请求执行会进入超时状态

时间:2016-04-19 14:55:05

标签: sql-server tsql sql-server-2008-r2

我有一个T-SQL请求,其执行时间有时非常短,有时很长,具体取决于where-condition中的给定参数。

如果第一次执行只需很短的时间,则所有后续长时间执行都会遇到超时异常

  

“超时已过期。操作完成前经过的超时时间”。

如果我通过执行此操作来清除缓存...

DBCC FreeProcCache
DBCC DropCleanbuffers

...并在首先执行所有进一步请求成功执行长时间运行的请求。

这种行为背后的机制是什么?如何阻止sql server终止长时间运行的请求?

1 个答案:

答案 0 :(得分:2)

您正在看到所谓的参数嗅探。基本上,优化器正在根据遇到的第一个参数构建执行计划。不过,这个计划可能不适合其他参数。您可以查看OPTION(RECOMPILE),因为每次运行代码时都会重建执行计划。

请查看以下链接以获取解释;

https://www.brentozar.com/archive/2013/06/the-elephant-and-the-mouse-or-parameter-sniffing-in-sql-server/