我们正在尝试诊断复杂存储过程中的缓慢性(它有几个巨大的查询)。
当我们从 ASP.NET 调用 SP 时,需要 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 的锁定方式与控制台应用程序不同?