什么会导致参数嗅探一台计算机而不是另一台?

时间:2013-06-07 19:27:44

标签: sql sql-server performance sql-server-2008

我今天刚刚遇到MSSQL中的参数嗅探,并使用OPTION RECOMPILE来加速查询,使用参数vs instant而不需要2.5秒。在不同的开发人员计算机上,他们可以在没有OPTION RECOMPILE的情况下运行完全相同的查询,并且运行得非常快。

什么可能导致一台机器需要OPTION RECOMPILE而另一台机器不需要?

1 个答案:

答案 0 :(得分:9)

假设您的意思是两台计算机都连接到同一台服务器,那么可能存在设置差异导致不合适的计划在两个连接之间不共享。

为了使连接重用以前缓存的计划,相当多的设置(计划缓存密钥)必须相同,包括ANSI_NULLSARITHABORTLanguage,{{1}和默认模式(如果查询依赖于任何隐式名称解析)。

您可以通过查看DATEFIRSTsys.dm_exec_plan_attributes在连接之间需要相同的内容来查看这些内容)。

is_cache_key=1

的完整属性列表
is_cache_key=1

dbid_execute required_cursor_options compat_level parent_plan_handle date_format language_id status merge_action_type is_replication_specific objectid acceptable_cursor_options date_first set_options user_id dbid optional_spid optional_clr_trigger_objid optional_clr_trigger_dbid set_options是包含各种选项as documented here的位标志。在我的实验中cursor_options实际上是指user_id而不是schema_id(default_schema_name)