Dato un certo tipo di attesa, come si trovano quali query stanno causando quelle attese in modo sicuro su un server SQL 2008 R2 di produzione?
In questo caso particolare mi chiedo async_network_io
.
Dato un certo tipo di attesa, come si trovano quali query stanno causando quelle attese in modo sicuro su un server SQL 2008 R2 di produzione?
In questo caso particolare mi chiedo async_network_io
.
Risposte:
Il mio modo preferito per controllare questi è usare l'eccellente proc sp_WhoIsActive di Adam Machanic. Ecco un video su come usarlo e un link per scaricare il codice:
http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/
Il problema è che devi eseguirlo periodicamente per verificare i risultati. Se vuoi che questi dati vengano raccolti periodicamente per te, dai un'occhiata al tutorial di Kendra Little sull'acquisizione dei risultati sp_WhoIsActive in una tabella:
http://www.littlekendra.com/2011/02/01/whoisactive/
Infine, se vuoi che qualcosa si attivi quando una query attende async_network_io, puoi utilizzare un nuovo strumento chiamato Eventi estesi. È come i punti di debug all'interno del motore di SQL Server in cui è possibile realizzare la magia. Francamente, è un po 'doloroso da usare in questo momento nel 2008.
'async_wait_io' non è un tipo di attesa. I possibili tipi di attesa% ASYNC sono:
Alcuni buoni collegamenti per i tipi di attesa:
Il mio andare alla query per trovare le attese attuali:
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 = '?'