Найти запросы, которые вызывают ожидания

34

Учитывая определенный вид ожидания, как вы находите, какие запросы вызывают эти ожидания безопасно на производственном сервере SQL 2008 R2?

В этом конкретном случае мне интересно async_network_io.

Кайл Брандт
источник

Ответы:

32

Мой любимый способ проверить это - использовать отличный хранимый процесс Адама Мачаника sp_WhoIsActive. Вот видео о том, как его использовать и ссылка для загрузки кода:

http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/

Подвох в том, что вы должны периодически запускать его, чтобы проверить результаты. Если вы хотите, чтобы эти данные периодически собирались для вас, ознакомьтесь с руководством Кендры Литтла по записи результатов sp_WhoIsActive в таблицу:

http://www.littlekendra.com/2011/02/01/whoisactive/

Наконец, если вы хотите, чтобы что-то запускалось всякий раз, когда запрос ожидает async_network_io, вы можете использовать новый инструмент под названием Extended Events. Это похоже на точки отладки внутри движка SQL Server, где вы можете творить чудеса. Честно говоря, это немного больно использовать прямо сейчас в 2008 году.

Брент Озар
источник
14

'async_wait_io' не является типом ожидания. Возможные типы ожидания ASYNC%:

  • ASYNC_IO_COMPLETION
  • ASYNC_NETWORK_IO
  • ASYNC_DISKPOOL_LOCK

Несколько хороших ссылок для типов ожидания:

Мой запрос на поиск текущих ожиданий:

SELECT  req.session_id
       ,blocking_session_id
       ,ses.host_name
       ,DB_NAME(req.database_id) AS DB_NAME
       ,ses.login_name
       ,req.status
       ,req.command
       ,req.start_time
       ,req.cpu_time
       ,req.total_elapsed_time / 1000.0 AS total_elapsed_time
       ,req.command
       ,req.wait_type
       ,sqltext.text
FROM    sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
JOIN    sys.dm_exec_sessions ses
        ON ses.session_id = req.session_id
WHERE req.wait_type IS NOT NULL
--WHERE req.wait_type = '?'
Эрик Хамфри - Лотсхелп
источник
Извините, я имел в виду async_network_io.
Кайл Брандт
Другие очень хорошие статьи: теряйте статистику ожидания с Brent O и Buck Woody и статистикой Wait . Они очень полезны!
Marian
@Marian: Брент показал мне кое-что сегодня, но до того, как мы добрались до него, не хватило времени, может быть, эта статья будет такой же хорошей :-)
Кайл Брандт,
@ Кайл, у тебя есть Брент, чтобы показать тебе вещи и все же спросить нас? :) Вы должны приковать его цепью к стулу в вашем офисе .. высушить его мозг ... и затем отпустить его;). И не забудьте сообщить нам о результатах!
Marian
@Marian: Да, очень повезло, что он помог. Дело в том, что если я получу ответ здесь, то все остальные в Интернете также получат ответ :-)
Кайл Брандт,