Dado un cierto tipo de espera, ¿cómo encuentra qué consultas están causando esas esperas de forma segura en un servidor SQL 2008 R2 de producción?
En este caso particular me pregunto async_network_io
.
Dado un cierto tipo de espera, ¿cómo encuentra qué consultas están causando esas esperas de forma segura en un servidor SQL 2008 R2 de producción?
En este caso particular me pregunto async_network_io
.
Respuestas:
Mi forma favorita de verificar esto es usar el excelente procedimiento almacenado sp_WhoIsActive de Adam Machanic. Aquí hay un video sobre cómo usarlo y un enlace para descargar el código:
http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/
El problema es que debe ejecutarlo periódicamente para verificar los resultados. Si desea que estos datos se recopilen periódicamente, consulte el tutorial de Kendra Little sobre la captura de resultados de sp_WhoIsActive en una tabla:
http://www.littlekendra.com/2011/02/01/whoisactive/
Finalmente, si desea que algo se active siempre que una consulta espere async_network_io, puede usar una nueva herramienta llamada Eventos extendidos. Es como depurar puntos dentro del motor de SQL Server donde puedes hacer que la magia suceda. Francamente, es un poco doloroso usarlo ahora mismo en 2008.
'async_wait_io' no es un tipo de espera. Los posibles tipos de espera ASYNC% son:
Algunos buenos enlaces para los tipos de espera:
Mi consulta para encontrar las esperas actuales:
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 = '?'