Com um certo tipo de espera, como você encontra quais consultas estão causando essas esperas com segurança em um SQL 2008 R2 Server de produção?
Neste caso em particular, eu estou pensando sobre async_network_io
.
Com um certo tipo de espera, como você encontra quais consultas estão causando essas esperas com segurança em um SQL 2008 R2 Server de produção?
Neste caso em particular, eu estou pensando sobre async_network_io
.
Respostas:
Minha maneira favorita de verificar isso é usar o excelente processo armazenado sp_WhoIsActive de Adam Machanic. Aqui está um vídeo sobre como usá-lo e um link para baixar o código:
http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/
O problema é que você deve executá-lo periodicamente para verificar os resultados. Se você deseja que esses dados sejam coletados periodicamente, consulte o tutorial de Kendra Little sobre a captura de resultados sp_WhoIsActive em uma tabela:
http://www.littlekendra.com/2011/02/01/whoisactive/
Por fim, se você deseja que algo seja acionado sempre que uma consulta aguardar async_network_io, você pode usar uma nova ferramenta chamada Eventos Estendidos. É como pontos de depuração dentro do mecanismo do SQL Server, onde você pode fazer mágica acontecer. Francamente, é um pouco doloroso de usar agora em 2008.
'async_wait_io' não é um tipo de espera. Os tipos possíveis de espera de ASYNC% são:
Alguns bons links para tipos de espera:
Minha consulta para encontrar as esperas atuais:
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 = '?'