当我的一个查询的执行时间比预期的要长得多时,我遇到了参数嗅探。当我更深入地研究这个问题时,我开始知道:
当第一次执行查询时,它(SQL Server)为该查询和其他 n 次执行相同的查询创建执行计划,如果第一次执行的结果集差异很大,则出现参数嗅探问题”。
这是在我的场景中。
现在我的问题是,在这些情况下,是否有任何方法或解决方法可以克服 SQL Server 中的参数嗅探?
我知道通过运行
sp_updatestats
我可以验证它是否正在发生。而且我知道要解决这个问题,我需要监控过程缓存,我可以通过
query_hash
这些query_plan_hash
字段sys.dm_exec_query_stats
来做到这一点。我不想
RECOMPILE
在SET
变量部分中使用,因为这会在每次执行查询时创建新的执行计划。
但是,我不想通过在查询本身中做一些事情来验证问题,而是指例如“在运行时检测问题并仅在需要时创建新的执行计划(不是每次)”。
我经常遇到参数嗅探问题,所以每一个有用的建议和帮助都将不胜感激。提前致谢!