我有一个T-SQL请求,其执行时间有时非常短,有时很长,具体取决于where-condition中的给定参数。
如果第一次执行只需很短的时间,则所有后续长时间执行都会遇到超时异常
“超时已过期。操作完成前经过的超时时间”。
如果我通过执行此操作来清除缓存...
DBCC FreeProcCache
DBCC DropCleanbuffers
...并在首先执行所有进一步请求成功执行长时间运行的请求。
这种行为背后的机制是什么?如何阻止sql server终止长时间运行的请求?
答案 0 :(得分:2)
您正在看到所谓的参数嗅探。基本上,优化器正在根据遇到的第一个参数构建执行计划。不过,这个计划可能不适合其他参数。您可以查看OPTION(RECOMPILE),因为每次运行代码时都会重建执行计划。
请查看以下链接以获取解释;