Biorąc pod uwagę pewien rodzaj oczekiwania, w jaki sposób można znaleźć, które zapytania powodują ich bezpieczne czekanie na produkcyjnym serwerze SQL 2008 R2?
W tym konkretnym przypadku zastanawiam się async_network_io
.
Biorąc pod uwagę pewien rodzaj oczekiwania, w jaki sposób można znaleźć, które zapytania powodują ich bezpieczne czekanie na produkcyjnym serwerze SQL 2008 R2?
W tym konkretnym przypadku zastanawiam się async_network_io
.
Odpowiedzi:
Moim ulubionym sposobem sprawdzenia tego jest użycie doskonałego przechowywanego proc sp_WhoIsActive Adama Machanica. Oto wideo, jak go używać i link do pobrania kodu:
http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/
Problem polega na tym, że należy go uruchamiać okresowo, aby sprawdzić wyniki. Jeśli chcesz okresowo gromadzić te dane, zapoznaj się z samouczkiem Kendry Little dotyczącym przechwytywania wyników sp_WhoIsActive do tabeli:
http://www.littlekendra.com/2011/02/01/whoisactive/
Wreszcie, jeśli chcesz, aby coś uruchomiło się za każdym razem, gdy zapytanie czeka na async_network_io, możesz użyć nowego narzędzia o nazwie Rozszerzone zdarzenia. To jak punkty debugowania w silniku SQL Server, w których można sprawić, by magia się wydarzyła. Szczerze mówiąc, używanie go w 2008 roku jest trochę bolesne.
„async_wait_io” nie jest typem oczekiwania. Możliwe typy oczekiwania ASYNC% to:
Kilka dobrych linków do typów oczekiwania:
Moje przejście do zapytania w celu znalezienia bieżących oczekiwań:
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 = '?'