使用XML参数进行参数嗅探

时间:2012-08-03 18:51:56

标签: sql-server tsql

我目前正在尝试解决一个问题,即我的某个存储过程会错误地缓存错误的查询计划。很多资源表明这种问题可能是由参数嗅探造成的,但我不确定我的案例是否适用。

具体来说,我有一个XML类型的参数,我在sproc中做的第一件事就是将它加载到临时表中。这可能会受到参数嗅探的影响吗?

(复制是时间成本高,就像我说的那样,非确定性,这就是为什么我还没有检查过)

2 个答案:

答案 0 :(得分:0)

我不知道plan is non-determinstically cached对于执行计划的意思可以是兑现还是不兑现。 服务器使用参数嗅探来根据参数值找出最有效的执行计划,该参数值在某些条件下使用。粗略地说,使用参数sniffling sql-server决定使用某些索引是否有效。您可以阅读更多相关信息,例如in this blog

所以,回答你的问题,因为在某些条件下你没有使用xml参数,只是将它加载到临时表中,执行计划不会受到参数sniffling的影响。

但是,只要您使用临时表,执行计划在大多数情况下都不会兑现,并且会在每次执行时重新编译。如果您希望对计划进行兑现,请考虑使用表变量。

希望这会有所帮助。

答案 1 :(得分:0)

这是一个愚蠢的问题:表格统计数据的样本量太小(非常大的表格)。我们显着提高了样本量,一切都恢复正常。