从.NET应用程序调用SQL Server时运行速度非常慢

时间:2013-08-14 15:17:34

标签: sql sql-server nhibernate timeoutexception

我使用nHibernate在我的ASP.NET应用程序中调用存储过程:

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

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

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

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

1 个答案:

答案 0 :(得分:3)

请注意,这类问题最完整的解决方案是found here,这是最好的书面文章之一。 IF 您正在将参数从外部应用程序传递到存储过程中,一个快速入侵的程序可以在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

但是,假设您的应用程序中存在存储过程所需的参数(从您发布的简短代码片段看起来如此)。否则,提供的链接还会描述其他一些疏忽,我强烈建议任何人从外部应用程序中排除性能故障。