2009-05-04 16 views
46

Mit Sql Server 2005 Profiler, welche Ereignisse, Spalten und Filter verfolgen Sie, um Ihre langsamsten Abfragen und gespeicherten Prozeduren zu finden?So finden Sie langsamste Abfragen

Langsam = größer als N Sekunden, 10 wegen Argument.

+0

Definieren Sie "langsam". Während eine Abfrage langsam sein kann, ist dies nur relevant für die Anzahl der getätigten Anrufe und ob diese kritisch sind oder nicht. – Lucero

Antwort

77

In SQL 2005 können Sie Verwaltungsansichten verwenden, um slow running queries zu finden. Ein gutes Skript, das ich vor einer Weile auf SQL server performance gefunden habe, wird dir helfen, loszulegen; Es listet Daten mit der langsamsten zuerst auf.

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; 
+1

Kennen Sie die Maßeinheit zu den Zeiten: total_worker_time, total_elapsed_time und avg_elapsed_time? –

+4

Die Zeiten sind in Mikrosekunden; MSDN hat eine gute Aufschlüsselung in der Management-Ansicht http://msdn.microsoft.com/en-us/library/ms189741.aspx – u07ch

+1

Ja, diese DMV sind großartig - aber sie sind auch dynamisch - wie der Name sagt, z. Sie werden bei jedem Start des Servers gelöscht. Wenn Ihr Server jede Nacht neu gestartet wird, stellen diese möglicherweise an einem bestimmten Tag kein sehr zuverlässiges Beispiel dar. Behandeln Sie diese Messungen also sorgfältig - sie sind dynamisch und basieren möglicherweise auf einem relativ kleinen Beispiel ... –

3

Die Dauer Spalte tut es für mich, aber manchmal schaue ich auch auf die liest und schreibt Spalten.

Ich verwende den TSQL: StmtCompleted Filter, um die rohen Abfragen zu erhalten. Vielleicht möchten Sie andere wie gespeicherte Prozeduren hinzufügen, aber die tsql ist die 'Basis', die Sie anzeigen müssen. Da die MSDN article sagt

„Die Ausführung einer gespeicherten Prozedur kann durch die SP überwacht werden: Starten, SP: StmtStarting, SP: StmtCompleted und SP: Completed-Ereignisklassen und alle TSQL-Ereignisklassen . "

10

Bevor ich den Profiler verwende, überprüfe ich die eingebauten Nutzungsberichte. Klicken Sie mit der rechten Maustaste auf eine Datenbank, Berichte, Standardberichte und dann auf Objektausführungsstatistiken.

Es listet die aktuell zwischengespeicherten Ausführungspläne auf, zusammen mit der Anzahl der Ressourcen und der Anzahl der Ausführungen. Dies gibt im Allgemeinen eine sehr gute Vorstellung davon, was den Server beschäftigt hält.

+1

@Andomar, Ist es in Ordnung, diesen Bericht auf einem Produktionsserver auszuführen? Ich habe versucht, diesen Bericht auf einem meiner Produktionsserver auszuführen, und nach einer Minute hieß es immer noch "retreiving data". Ich habe es aufgehört, um sicher zu sein. –

+0

@ Bill Paetzke: Der Bericht sollte für die Produktion sicher sein, auch wenn er ziemlich lange läuft. Wenn Sie ihm nicht vertrauen, können Sie die Prozessliste auf Blockierungsprobleme überprüfen! – Andomar