Подтвердить что ты не робот

SQL Server - Management Studio - Статистика клиентов - Время ожидания ответов на сервер и время обработки клиента

У меня медленный запрос, который я работал над оптимизацией.

При просмотре статистики клиентов в Studio Management он занимает около 8 секунд ожидания ответа на серверные ответы и около 1 секунды на время обработки клиента.

Я всегда думал, что время ожидания ответа сервера - это номер для работы, и время обработки клиента обычно связано с шириной полосы или большим размером данных.

Я сделал ряд изменений в запросе, и теперь мое время ожидания ответов на сервер составляет около 250 мс, однако время обработки клиента увеличилось примерно до 9 секунд, делая время выполнения Total немного медленнее.

Возвращаемый результирующий набор точно такой же.

Может кто-то пролить свет на то, что именно разница между этими двумя числами и что может вызвать такой результат?

4b9b3361

Ответ 1

"Время ожидания ответов сервера" - это время между последним пакетом запроса, оставленным клиентом, и самый первый ответный пакет, возвращенный с сервера. "Время обработки клиента" - это время между первым пакетом ответа и последним ответным пакетом. Кстати, я не мог найти документацию, подтверждающую эти утверждения, но я бы сказал, основываясь на своих наблюдениях, что они являются обоснованными обоснованными предположениями.

Если вы выполняете запрос с большим временем ожидания ответов на сервер, это означает, что серверу понадобилось много времени для создания самой первой строки. Это обычно выполняется в запросах, которые имеют операторы, которым требуется весь подзапрос, чтобы оценить их, прежде чем они начнут (типичный пример - операторы сортировки).

С другой стороны, запрос с очень маленьким временем ожидания ответов на сервер означает, что запрос смог быстро вернуть первую строку. Однако длительное время обработки клиента не обязательно означает, что клиент потратил много времени на обработку, и сервер был заблокирован на ожидании клиента. Это может просто означать, что сервер продолжал возвращать строки из результата, и это было так долго, пока не вернулась последняя строка.

То, что вы видите, является результатом изменений в плане запросов, которые, вероятно, удалили оператора, который блокировал выполнение (скорее всего, это сортировка), а новый план использует другую стратегию, которая быстрее производит первый результат (вероятно, использует индекс, который гарантирует запрошенный заказ, поэтому мне не нужен какой-либо вид), но в целом дольше.

Если вы беспокоитесь о том, что клиент держит сервер (это может произойти на больших наборах результатов), вы должны исследовать wait_type в sys.dm_exec_requests (также информация из sys.dm_os_tasks и sys.dm_os_workers полезно) для сеанса, выполняющего исследуемый запрос. Если я не ошибаюсь, ожидающий сервер ожидающий тип ASYNC_NETWORK_IO. Вы также можете проверить агрегат sys.dm_os_wait_stats, reset с помощью DBCC SQLPERF("sys.dm_os_wait_stats" , CLEAR), запустите запрос, посмотрите, как долго добавляется тип ожидания ASYNC_NETWORK_IO. Конечно, убедитесь, что во время теста на сервере не было другого действия.

Ответ 2

ОК, я нашел несколько статей, относящихся к этому вопросу. Надеюсь, они могут быть полезны. Должен сказать, что это открыло для меня все новые двери, касающиеся настройки исполнения запроса.

События ожидания SQL Server: выведение Guesswork из профилирования производительности

Анализ производительности запросов в SQL Server 2005

Показывать базу данных SQL Server

INF: Клиентские эффекты при пропускной способности SQL Server