gpt4 book ai didi

SQL Server 2008 选项(重新编译)

转载 作者:行者123 更新时间:2023-12-05 01:37:07 26 4
gpt4 key购买 nike

我有一个从 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 主机/ guest 设置、服务器、操作系统设置都是相同的:

2) SQL Server 2008 版本不同。测试环境(仍然)具有 RTM 版本 (10.0.1600.22),生产环境具有 SP2 (10.0.4064.0)

3) 当我们在上面的 SQL 语句中添加 OPTION(RECOMPILE) 时,查询在所有环境中都正确执行。

4) RTM 版本中的 OPTION(RECOMPILE) 存在问题 - 有一些关于此的文档/帖子,但我不清楚如何解释这个问题。

我的问题是:

在技术层面,为什么旧​​的 RTM 版本在没有 OPTION(RECOMPILE) 的情况下运行良好,但最新版本 (SP2) 却超时了?

提前致谢。

最佳答案

生产服务器上是否存在测试服务器中不存在的额外负载(在此数据库中,或 SQL Server 中的任何位置,甚至可能是服务器上的一个完全独立的任务)?

关于SQL Server 2008 选项(重新编译),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8262581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com