Наше приложение выполняет длинную волосатую хранимую процедуру с несколькими наборами результатов. Пользователи испытывают длительное время ожидания для этого запроса, поэтому я решил определить причину задержки.
Я ставлю секундомер на выполнение и чтение данных, и каждый раз это занимает 6-7 секунд. Я рассчитал время выполнения хранимой процедуры, ожидая, что это займет все время. Это не было - это заняло 30 мс или около того.
Поэтому я установил таймеры вокруг каждого из ~ 20 наборов результатов. Каждый «блок» занимал очень мало времени (<10 мс), за исключением одного в середине обработки, что занимало 5-6 секунд. После дальнейших исследований я обнаружил, что это вызов «reader.NextResult ()», который занимал все время. Эта длительная задержка происходит каждый раз в одном и том же месте. </p>
Если я просто выполняю хранимую процедуру, кажется, что она запускается очень быстро, так что не кажется, что это проблема с запросом - но я не знаю ...
Как мне это интерпретировать? Отправляет ли мне SQL наборы результатов по мере их получения, и может ли рассматриваемый набор быть проблемной областью в моем SQL-запросе? Или что-то еще может быть причиной задержки?
EDIT:
Спасибо за ответ и комментарии - я использую SQL Server и .NET
Что меня больше всего интересовало, так это то, ПОЧЕМУ моя задержка происходит при вызове NextResult (). Будучи новичком в разработке SQL, я предполагал, что задержка из-за длительного выполнения хранимой процедуры будет отображаться в моем приложении во время ожидания возврата вызова «ExecuteReader ()». Теперь кажется, что SQL начнет возвращать данные ДО того, как запрос будет завершен, и если будет задержка, он задержит вызов NextResult ().
Я начал думать, что моя задержка была в хранимой процедуре. Когда вызов ExecuteReader () вернулся быстро, я подумал, что моя задержка заключалась в обработке кода читателем. Когда задержка закончилась вызовом NextResult (), я был в замешательстве. Теперь я вернулся к рассмотрению хранимой процедуры.
Спасибо тем из вас, кто нашел время, чтобы рассмотреть мою проблему и предложил вашу помощь.