2

我在我的 ASP.NET 应用程序中使用 nHibernate 对存储过程进行了 SQL 调用:

GetNamedQuery("MyProc")
.SetString("param1", value1)
.SetString("param2", value2)
...

此处使用 SQL Server 2005。它在我们的测试环境中运行良好,这个调用大约需要 2 秒才能完成。但是当我们将它移动到新服务器时,它开始需要很长时间,并且我的应用程序中出现超时异常。

但是,我在 SQL Server Profiler 中捕获调用,发现该调用运行了 30 秒。但是当我复制相同的查询并在服务器上运行它时,它会在 2 秒内完成。

那么问题是什么会影响来自 .NET 应用程序的工作查询?

4

1 回答 1

3

毫无疑问,此类问题的最完整解决方案可在此处找到,这是最好的书面文章之一。 如果您要从外部应用程序将参数传递到存储过程中,那么在 80% 的时间里有效的一种快速破解方法是本地化过程中的参数:

CREATE PROCEDURE sp_Test
@VarOne INT, @VarTwo INT
AS
BEGIN

DECLARE @VOne INT, @VTwo INT
SET @VOne = @VarOne
SET @VTwo = @VarTwo

/* Rest of code only uses @VOne and @VTwo for parameters */

END

但是,这是假设您的应用程序中有存储过程需要的参数(从您发布的简短代码片段中可以看出)。否则,提供的链接还描述了一些其他疏忽,我强烈推荐给任何从外部应用程序排除性能问题的人。

于 2013-08-14T15:32:25.060 回答