Wie finde ich eine lange laufende Abfrage mit Prozess-ID, Prozessname, Anmeldezeit, Benutzer, Startzeit und Dauer?

23

Kann mir jemand helfen, unten angegebene Details für eine lange laufende Abfrage zu finden. ProcessID, Prozessname, Datenbank, Host, Benutzer, Prozessanmeldezeit, Abfragestartzeit und Abfragedauer.

Ich suche eine Anfrage oder einen SP, der mir diese Daten liefert.

user3598321
quelle

Antworten:

38

Das beste Tool ist sp_whoIsActive von Adam Machanic . Es kann auf verschiedene Arten verwendet werden, um zu sehen, was zum Zeitpunkt des Starts des Skripts ausgeführt wird, oder Sie können es in Schleifen ausführen, um bestimmte Aktionen zu überwachen, z. B. langsame Abfragen.

Informationen zum Ausführen in einer Schleife finden Sie hier: So protokollieren Sie die Aktivität mit sp_whoisactive in einer Schleife So erkennen Sie langsame Abfragen: So suchen Sie mit sp_WhoIsActive nach langsamen SQL Server-Abfragen

Sie können DMVs direkt verwenden, um Ihre langsamsten Abfragen zu erhalten und von dort aus zu handeln. Überprüfen Sie die Diagnoseabfragen von Glenn Berry .

Und schließlich können Sie diese Abfrage verwenden, um die zeitaufwändigsten Abfragen zu finden. Sie können mit den dm_exec_query_stats herumspielen , um weitere Daten hinzuzufügen, oder sich mit anderen verbinden, um weitere Informationen zu erhalten. Beachten Sie, dass dmvs bei jedem Neustart des Servers gelöscht und aktualisiert werden.

SELECT  creation_time 
        ,last_execution_time
        ,total_physical_reads
        ,total_logical_reads 
        ,total_logical_writes
        , execution_count
        , total_worker_time
        , total_elapsed_time
        , total_elapsed_time / execution_count avg_elapsed_time
        ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
         ((CASE statement_end_offset
          WHEN -1 THEN DATALENGTH(st.text)
          ELSE qs.statement_end_offset END
            - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY total_elapsed_time / execution_count DESC;

BEARBEITEN

Eine neue Option ist bereits seit einiger Zeit verfügbar, First Reponder Kit . Eine Reihe von Skripten, die vom BrentOzar-Team unter MIT-Lizenz kostenlos zur Verfügung gestellt werden und bei verschiedenen Aufgaben hilfreich sind, einschließlich der vom OP gestellten. Hauptsächlich sp_BlitzFirst und sp_BlitzWho Skripte für diesen Fall.

Jaroslaw
quelle
10

Ich kann sp_whoisactive nur empfehlen . Es handelt sich um einen Drittanbieter-SP, der Ihnen jedoch alles mitteilen kann, was Sie oben aufgeführt haben, und noch viel mehr. Es ist ein unglaubliches Werkzeug in Ihrem Arsenal.

Bob Pusateri
quelle