Мы пытаемся диагностировать медленность в сложной хранимой процедуре (у нее есть несколько огромных запросов).
Когда мы вызываем SP из ASP.NET, это занимает 5 секунд.
Когда мы вызываем его из SQL Management Studio (только с помощью EXEC), он занимает 0,05 секунды.
Мы тестировали это поведение последовательно разными способами и обстоятельствами.
Это с С#.NET. База данных - это MS SQL Server 2012.
Проблема с веб-приложением, но мы написали небольшое консольное приложение в качестве тестового жгута, и все будет по-другому.
1) Мы вычисляем прошедшее время в консольном приложении С#.NET следующим образом:
stopwatch.Start();
rdr = cmd.ExecuteReader();
stopwatch.Stop();
2) Мы вычисляем прошедшее время в процедуре SQL, вызывая GETDATE() до и после запроса, а затем сохраняя это время в маленькой таблице. Мы можем запросить эту таблицу в SQL Mgmt Studio, чтобы узнать, как долго выполнялись запросы внутри SP.
Таким образом, мы можем видеть, сколько времени потрачено на SQL в сравнении с целым, а 99% этого потрачено на SQL.
Но трудно отлаживать и улучшать, если он не замедляется и в SQL Mgmt Studio.
Итак, мой вопрос в том, почему разница? Может быть, SQL Mgmt Studio блокируется иначе, чем консольное приложение?