Учитывая определенный вид ожидания, как вы находите, какие запросы вызывают эти ожидания безопасно на производственном сервере SQL 2008 R2?
В этом конкретном случае мне интересно async_network_io
.
Учитывая определенный вид ожидания, как вы находите, какие запросы вызывают эти ожидания безопасно на производственном сервере SQL 2008 R2?
В этом конкретном случае мне интересно async_network_io
.
Ответы:
Мой любимый способ проверить это - использовать отличный хранимый процесс Адама Мачаника 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 году.
'async_wait_io' не является типом ожидания. Возможные типы ожидания ASYNC%:
Несколько хороших ссылок для типов ожидания:
Мой запрос на поиск текущих ожиданий:
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 = '?'