it-swarm-eu.dev

Suchen Sie nach Abfragen, die Wartezeiten verursachen

Wie können Sie bei einer bestimmten Wartezeit feststellen, welche Abfragen diese Wartezeiten auf einem SQL 2008 R2-Produktionsserver sicher verursachen?

In diesem speziellen Fall wundere ich mich über async_network_io.

34
Kyle Brandt

Meine Lieblingsmethode, um dies zu überprüfen, ist die Verwendung von Adam Machanics ausgezeichnetem gespeicherten Prozess sp_WhoIsActive. 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 nach Ergebnissen zu suchen. Wenn Sie möchten, dass diese Daten regelmäßig für Sie erfasst werden, lesen Sie das Tutorial von Kendra Little zum Erfassen von sp_WhoIsActive-Ergebnissen 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 auslösen können. Ehrlich gesagt ist es ein wenig schmerzhaft, es jetzt im Jahr 2008 zu verwenden.

32
Brent Ozar

'async_wait_io' ist kein Wartetyp. Mögliche ASYNC% -Wartetypen sind:

  • ASYNC_IO_COMPLETION
  • ASYNC_NETWORK_IO
  • ASYNC_DISKPOOL_LOCK

Ein paar gute Links für Wartetypen:

Ich gehe zur Abfrage, um aktuelle Wartezeiten zu finden:

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 = '?'