我们正在尝试诊断一个复杂存储过程的缓慢问题(其中包含几个巨大的查询语句)。
当我们从ASP.NET调用该存储过程时需要5秒。
但是,当我们从SQL Management Studio中调用它(只使用EXEC),仅需要0.05秒。
我们已经以许多不同的方式和情况始终测试了这种行为。
这是在C#.NET环境下进行的。数据库是MS SQL Server 2012。
这个问题与Web应用有关,但我们编写了一个小的控制台应用程序作为测试工具,结果显示相同。
1) 我们在C#.NET控制台应用程序中计算经过时间的方法如下:
stopwatch.Start();
rdr = cmd.ExecuteReader();
stopwatch.Stop();
2)我们通过在查询之前和之后调用GETDATE()来计算SQL存储过程内的经过时间,然后将这些时间存储在一个小表中。我们可以在SQL Mgmt Studio中查询该表,以查看SP中的查询花费了多长时间。
这样我们就可以看到在整个过程中有多少时间花费在SQL上,而其中99%的时间都花费在SQL上。
但是如果在SQL Mgmt Studio中没有相同的缓慢现象,那么调试和改进会很困难。
所以我的问题是,为什么会有差别?可能是SQL Mgmt Studio与控制台应用程序锁定方式不同吗?