我有一个从ASP.NET应用程序执行的参数化查询,该应用程序在SQL Server中使用sp_executesql语句执行
e.g.
exec sp_executesql N'SELECT [COL1], [COL2] FROM [MyView]
WHERE (([COL1] = @PARM1) AND ([COL2] = @PARAM2 )
ORDER BY [COL3]',N'@PARAM1 int,@PARM2 int,@',@PARAM1=21,@PARM2=255
此查询在生产环境中运行时间很长(并且超时),但它不在测试环境中。
快速分析确定基础表需要正确的索引 - 并在生产环境中添加其他索引并对数据进行分区解决了生产环境中的性能问题。
然而,目前尚不清楚为什么测试环境从来没有出现过这个问题。经过进一步调查,我们确定:
1)我们可以找到的所有VM主机/访客设置,服务器,操作系统设置都是相同的:
2)SQL Server 2008版本不同。测试环境(仍然)具有RTM版本(10.0.1600.22),生产具有SP2(10.0.4064.0)
3)当我们将OPTION(RECOMPILE)添加到上述SQL语句时,查询在所有环境中都能正确执行。
4)RTM版本中的OPTION(RECOMPILE)存在问题 - 有一些关于此问题的文档/帖子,但我不清楚解释这个问题。
我的问题是:
在技术层面,如果没有OPTION(RECOMPILE),为什么更老的RTM版本可以正常运行,但是最新版本(SP2)是超时的?
提前感谢。
答案 0 :(得分:0)
生产服务器上是否存在额外的负载(在此数据库中,或SQL服务器中的任何位置,或者甚至是服务器上的完全独立的任务),测试服务器中是否存在额外负载?