Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 медленная отдача данных запроса на клиента  [new]
Greedy
Member

Откуда:
Сообщений: 141
Добрый день.

Проблема следующая: есть некая хранимая процедура время выполнения которой в Management Studio занимает 10-20 секунд (результат ~5000 записей), при вызове этой же хранимки в клиенте(C#) загрузка данных может занять до 5 минут, причём прогресс показывает, что данные грузятся порциями по 50-100 строк(приблизительно). Несущественные(в плане времени выполнения в Management Studio) манипуляции(удаление/создание) с индексами иногда оказывают положительное действие и время загрузки данных на клиенте начинает совпадать со временем выполнения хранимки в Management Studio, но через некоторое время всё снова повторяется.
В таком поведении пока замечена только одна хранимка.

Подскажите, пожалуйста, куда смотреть?

select @@VERSION

Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright (C) 2017 Microsoft Corporation Express Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)
8 фев 19, 14:46    [21804403]     Ответить | Цитировать Сообщить модератору
 Re: медленная отдача данных запроса на клиента  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 35965
Смотреть на планы выполнения. Патчить сервер.
8 фев 19, 14:48    [21804407]     Ответить | Цитировать Сообщить модератору
 Re: медленная отдача данных запроса на клиента  [new]
mnbvcx
Member

Откуда:
Сообщений: 119
Greedy, статья "медленно в приложении быстро в ssms" - не ваш случай?
8 фев 19, 16:00    [21804529]     Ответить | Цитировать Сообщить модератору
 Re: медленная отдача данных запроса на клиента  [new]
L_argo
Member

Откуда:
Сообщений: 605
В приложении могут срабатывать какие-то события на этом читающем датасете.
Чудес не бывает. Серверу все равно, кто запустил тот же самый запрос. Планы выполнения не должны отличаться.
Правда может оказать влияние способ подключения и нюансы безопасности.
Я уже тут описывал случай, когда наблюдались дикие тормоза при падении резервного контроллера домена.

Есть много топиков на эту тему.
8 фев 19, 16:10    [21804559]     Ответить | Цитировать Сообщить модератору
 Re: медленная отдача данных запроса на клиента  [new]
Greedy
Member

Откуда:
Сообщений: 141
CU последнее накачу вечерком(там и проверю результат).
Бегло ознакомился со статьей "медленно в приложении быстро в ssms", если я правильно понял, то там упор делается на разность скорости выполнения запроса в приложении и в SSMS, а у меня проблема в скорости передачи данных. Может , конечно, это одно и то же, а я смотрю не под тем углом на проблему, но если данные "полились" на клиента, то почему так медленно? И сеть тут не причём - запуск приложения на сервере выполняется так же долго.
8 фев 19, 16:46    [21804632]     Ответить | Цитировать Сообщить модератору
 Re: медленная отдача данных запроса на клиента  [new]
ВМоисеев
Member

Откуда: Редкино
Сообщений: 1760
>Greedy, сегодня, 14:46 [21804403]
>Проблема следующая: …
<Засеки время выполнения подобной конструкции:
        using (SqlConnection connection = new SqlConnection("Соединение")) {
          connection.Open();
          SqlCommand command = new SqlCommand("", connection);
          command.Parameters.Clear();
          command.Parameters.Add...;
          command.CommandText = "spname";
          command.CommandType = CommandType.StoredProcedure;

          using (reader = command.ExecuteReader()) { 
             while (reader.Read());
          }
        }
8 фев 19, 16:58    [21804657]     Ответить | Цитировать Сообщить модератору
 Re: медленная отдача данных запроса на клиента  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6188
Greedy,

имо это настройки коннектора, например, на постраничную выгрузку. Был как-то любопытный случай - ускорялась загрузка в приложении при шевелении мышью.
8 фев 19, 17:22    [21804696]     Ответить | Цитировать Сообщить модератору
 Re: медленная отдача данных запроса на клиента  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27704
Greedy
там упор делается на разность скорости выполнения запроса в приложении и в SSMS, а у меня проблема в скорости передачи данных.
В исходном вопросе указано, что процедура выполняется в SSMS и приложении разное время. Факты таковы. А причина: "из за разного вроемени передачи данных" - это вы уже придумали.
Конечно, если другое процедуры передают данные быстро, а эта медленно, то дело не в "скорости передачи данных".
Greedy
но если данные "полились" на клиента, то почему так медленно?
Потому что данные на клиента отдаются до завершения запроса. Сервер выполняет запрос, и по мере получения результата, возвращает данные клиенту.
Greedy
И сеть тут не причём - запуск приложения на сервере выполняется так же долго.
Тем более. Ещё и от сети не зависит.
8 фев 19, 22:59    [21804968]     Ответить | Цитировать Сообщить модератору
 Re: медленная отдача данных запроса на клиента  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27704
Владислав Колосов
Greedy,

имо это настройки коннектора, например, на постраничную выгрузку. Был как-то любопытный случай - ускорялась загрузка в приложении при шевелении мышью.
Всякое может быть, конечно, но для начала всегда смотрят планы, и вообще, что там в профайлере - одинаково выполняется запрос, или нет. Как и написали сразу, в первом же ответе.
А потом уже смотрят экзотику, если всё одинаково.
8 фев 19, 23:00    [21804971]     Ответить | Цитировать Сообщить модератору
 Re: медленная отдача данных запроса на клиента  [new]
Greedy
Member

Откуда:
Сообщений: 141
Накатывание CU проблему не решило. Более внимательно прочитал статью "Медленно в приложении, быстро в SSMS", в первой части нашёл описание симптомов моей проблемы(спасибо за наводку - интересная статья). Проблема временно решена добавлением параметра в хранимку, по которому отрубается выборка части данных, которые не нужны в этом вызове(одна процедура для нескольких потребителей данных) + обновление статистики.

Всем спасибо, буду наблюдать насколько долго этого хватит)))
9 фев 19, 21:17    [21805422]     Ответить | Цитировать Сообщить модератору
 Re: медленная отдача данных запроса на клиента  [new]
L_argo
Member

Откуда:
Сообщений: 605
Поломанная или обновленная статистика будет одинаково влиять на оба способа получения результата.
9 фев 19, 23:41    [21805475]     Ответить | Цитировать Сообщить модератору
 Re: медленная отдача данных запроса на клиента  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 49866
Greedy
Накатывание CU проблему не решило. Более внимательно прочитал статью "Медленно в приложении, быстро в SSMS", в первой части нашёл описание симптомов моей проблемы(спасибо за наводку - интересная статья). Проблема временно решена добавлением параметра в хранимку, по которому отрубается выборка части данных, которые не нужны в этом вызове(одна процедура для нескольких потребителей данных) + обновление статистики.

Всем спасибо, буду наблюдать насколько долго этого хватит)))
правильно ли я понял, что в SSMS процедура вызывалась для одного результирующего набора данных, а в приложении - для другого, и эти наборы резко отличаются?
10 фев 19, 08:06    [21805541]     Ответить | Цитировать Сообщить модератору
 Re: медленная отдача данных запроса на клиента  [new]
Greedy
Member

Откуда:
Сообщений: 141
Параметры вызова были идентичны, как и возвращаемый набор данных, поэтому и возникло непонимание причин, так как в курсе про разные планы в зависимости от разных параметров.
10 фев 19, 12:45    [21805612]     Ответить | Цитировать Сообщить модератору
 Re: медленная отдача данных запроса на клиента  [new]
L_argo
Member

Откуда:
Сообщений: 605
Если сервер виртуальный, то не мешало бы оценить задачи, выполняемые на "соседних" серверах. Особенно их дисковые операции.

Н-р, у нас падала почта, когда на соседнем сервере выполнялся очень трудоемкий SQL-запрос.
10 фев 19, 21:36    [21805840]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить