Узнайте, какие запросы вызывают наибольшее количество сетевого трафика


23

На рабочем SQL-сервере я наблюдаю периодические огромные всплески трафика данных. До 200 Мбит / с, что вызывает ожидание NETWORK IO, что, в свою очередь, вызывает тайм-ауты запроса. Как я могу узнать, какие запросы возвращают большие наборы результатов?

Ответы:


18

Вы можете найти это в DMV s:

SELECT session_id, num_writes, st.text AS statement_text
FROM sys.dm_exec_connections AS ec
CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) AS st
ORDER BY num_writes DESC

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


7

Я бы проследил производственные данные с использованием SQL Profiler и собрал бы код / ​​пакеты, которые имеют наибольшее чтение и запись. Отфильтруйте трассировку, чтобы получить только те процедуры и пакеты с высоким уровнем чтения / записи. Выберите пример, который подходит вашему глазу: скажем, более 1 миллиона операций чтения или записи.

Я бы взял образец этих вызовов на машину разработчика / тестирования и запустил их в Management Studio с включенной опцией «Включить статистику клиента» (в меню «Запрос» - «Включить статистику клиента»). Затем у вас будет отдельное окно со статистикой клиента: байты отправлены с клиента, байты получены с сервера.

НЕ ВКЛЮЧАЙТЕ СЛЕДУЮЩУЮ ТРАССИРОВКУ БД ПРОДУКЦИИ БЕЗ ФИЛЬТРАЦИИ ДАННЫХ !!! Отфильтруйте максимально возможное (по базе данных, имени хоста, во что бы то ни стало) и только затем начните трассировку. Не забудьте закрыть Профилировщик после :-).

PS: я вспомнил еще один приятный вариант: вдоль трассировки в течение некоторого периода вы также должны сохранять данные, используя Perfmon (выбирайте только параметры ввода-вывода). Профилировщик имеет хорошую функцию импорта вместе файла трассировки и файла данных perfmon. И вы можете увидеть там, когда у вас есть самые большие пики IO.

PS2: я согласен, что вариант Гая более элегантный. Но я оставляю свой громоздкий ответ для потомков! :-)


5

Если вы еще не посмотрели его, возможно, вы захотите проверить sp_WhoIsActive Адама Мачаника. Недавно он сделал серию постов в блоге, объясняющих различные функции, встроенные в sp_WhoIsActive, одной из которых является @delta_interval.

Это не только покажет вам, что занимает больше всего ЦП или ввода-вывода в целом, но также может показать вам, что занимает сейчас больше всего ЦП или ввода-вывода.

Посмотрите следующую серию блогов для полного объяснения этой функции:

http://whoisactive.com/docs/01_background/

В следующем сообщении блога объясняется, как отсортировать выходные данные sp_WhoIsActive и выбрать столбцы для отображения:

http://whoisactive.com/docs/24_output/

Это одна из многих публикаций, доступных по следующей ссылке, которую он настроил.

http://whoisactive.com

Версия 11.0 доступна на момент этого ответа, поэтому, если вы используете более старую версию, возможно, пришло время обновить: D

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.