Wie stellen Sie bei einer bestimmten Wartezeit fest, welche Abfragen diese Wartezeiten auf einem SQL 2008 R2-Produktionsserver sicher verursachen?
In diesem speziellen Fall wundere ich mich über async_network_io
.
Wie stellen Sie bei einer bestimmten Wartezeit fest, welche Abfragen diese Wartezeiten auf einem SQL 2008 R2-Produktionsserver sicher verursachen?
In diesem speziellen Fall wundere ich mich über async_network_io
.
Antworten:
Meine Lieblingsmethode, um dies zu überprüfen, ist die Verwendung von Adam Machanics exzellentem sp_WhoIsActive-Speicherprozess. Hier ist ein Video zur Verwendung und ein Link zum Herunterladen des Codes:
http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/
Der Haken ist, dass Sie es regelmäßig ausführen müssen, um die Ergebnisse zu überprüfen. Wenn Sie möchten, dass diese Daten regelmäßig für Sie gesammelt werden, lesen Sie das Tutorial von Kendra Little zum Erfassen der sp_WhoIsActive-Ergebnisse in einer Tabelle:
http://www.littlekendra.com/2011/02/01/whoisactive/
Wenn Sie möchten, dass etwas ausgelöst wird, wenn eine Abfrage auf async_network_io wartet, können Sie ein neues Tool namens Extended Events verwenden. Es ist wie bei Debug-Punkten in der SQL Server-Engine, an denen Sie Magie verwirklichen können. Ehrlich gesagt, ist es im Moment 2008 ein wenig schmerzhaft zu verwenden.
'async_wait_io' ist kein Wartetyp. Mögliche ASYNC% -Wartetypen sind:
Ein paar gute Links für Wartetypen:
Meine Suche nach aktuellen Wartezeiten:
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 = '?'