Быстрый запуск дает хороший обзор всех функций.
«Время ожидания ответов сервера» - это время между последним пакетом запроса, оставленным клиентом, и самым первым пакетом ответа, возвращенным сервером. «Время обработки клиента» - это время между первым и последним ответным пакетом. Кстати, мне не удалось найти документацию, подтверждающую эти утверждения, но я бы сказал, основываясь на моих наблюдениях, что они являются обоснованным обоснованным предположением.
Если вы запустите запрос с большим «временем ожидания ответов сервера» это означает, что серверу потребовалось много времени для создания самой первой строки. Это обычно для запросов, в которых есть операторы, которым необходимо оценить весь подзапрос перед тем, как они продолжат работу (типичный пример - операторы сортировки).
С другой стороны, запрос с очень маленьким «временем ожидания ответа сервера» означает, что запрос смог быстро вернуть первую строку. Однако длительное «время обработки клиента» не обязательно означает, что клиент потратил много времени на обработку, и сервер был заблокирован в ожидании клиента. Это может просто означать, что сервер продолжал возвращать строки из результата, и именно столько времени прошло, пока не была возвращена самая последняя строка.
Вы видите результат изменений в плане запроса, которые, вероятно, удалили оператор, который блокировал выполнение (скорее всего, сортировку), и новый план использует другую стратегию, которая дает первый результат быстрее (вероятно, использует индекс, который гарантирует запрошенный порядок, поэтому сортировка i не требуется), но в целом длится дольше.
Если вас беспокоит, что клиент сдерживает сервер (это может происходить при больших наборах результатов), вам следует изучить wait_type
в sys.dm_exec_requests
(также информация из sys.dm_os_tasks
и sys.dm_os_workers
полезны для сеанса, выполняющего исследуемый запрос. Если я не ошибаюсь, сервер ожидает типа ожидания клиента ASYNC_NETWORK_IO
. Вы также можете проверить агрегат sys.dm_os_wait_stats
, сбросить его с помощью DBCC SQLPERF ("sys.dm_os_wait_stats", CLEAR)
, затем запустить запрос и посмотреть, сколько времени складывается тип ожидания ASYNC_NETWORK_IO . Конечно, убедитесь, что во время теста на сервере не происходит никакой другой активности.
sys.dm_os_workers
полезны для сеанса, выполняющего исследуемый запрос. Если я не ошибаюсь, сервер ожидает типа ожидания клиента ASYNC_NETWORK_IO
. Вы также можете проверить агрегат sys.dm_os_wait_stats
, сбросить его с помощью DBCC SQLPERF ("sys.dm_os_wait_stats", CLEAR)
, затем запустить запрос и посмотреть, сколько времени складывается тип ожидания ASYNC_NETWORK_IO . Конечно, убедитесь, что во время теста на сервере не происходит никакой другой активности. dm_os_tasks и sys.dm_os_workers
полезны для сеанса, выполняющего исследуемый запрос. Если я не ошибаюсь, сервер ожидает типа ожидания клиента ASYNC_NETWORK_IO
. Вы также можете проверить агрегат sys.dm_os_wait_stats
, сбросить его с помощью DBCC SQLPERF ("sys.dm_os_wait_stats", CLEAR)
, затем запустить запрос и посмотреть, сколько времени складывается тип ожидания ASYNC_NETWORK_IO . Конечно, убедитесь, что во время теста на сервере не происходит никакой другой активности. CLEAR) , затем запустите запрос, посмотрите, сколько времени складывается с типом ожидания ASYNC_NETWORK_IO. Конечно, убедитесь, что во время теста на сервере не происходит никакой другой активности. CLEAR) , затем запустите запрос, посмотрите, сколько времени складывается с типом ожидания ASYNC_NETWORK_IO. Конечно, убедитесь, что во время теста на сервере не происходит никакой другой активности. Хорошо, я нашел несколько статей по этой теме. Надеюсь, они могут быть вам полезны. Я должен сказать, что это открыло для меня все новые возможности в отношении настройки производительности запросов.
События ожидания SQL Server: устранение догадок из профилирования производительности
Анализ производительности запросов в SQL Server 2005