Suchen Sie nach Abfragen, die Wartezeiten verursachen

34

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.

Kyle Brandt
quelle

Antworten:

32

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.

Brent Ozar
quelle
14

'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:

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 = '?'
Eric Humphrey - Lotsahelp
quelle
Entschuldigung, ich meinte async_network_io.
Kyle Brandt
Andere sehr gute Artikel: Lose wait stats mit Brent O und Buck Woody und Wait stats . Sie sind sehr lohnenswert!
Marian
@Marian: Brent hat mir heute ein paar Sachen gezeigt, aber die Zeit ist knapp geworden, bevor wir zu diesem gekommen sind. Vielleicht ist dieser Artikel genauso gut :-)
Kyle Brandt
@Kyle du hast Brent, der dir Sachen zeigt und uns immer noch fragt? :) Du solltest ihn an den Stuhl in deinem Büro ketten .. sein Gehirn austrocknen .. und ihn dann gehen lassen;). Und vergessen Sie nicht, uns die Ergebnisse mitzuteilen!
Marian
@Marian: Yup sehr glücklich, seine Hilfe zu haben. Die Sache ist aber, wenn ich hier eine Antwort bekomme, dann bekommt auch jeder andere im Internet die Antwort :-)
Kyle Brandt