Da der SQL Profiler mit SQL Azure auch in der Version 2008 R2 leider nicht funktioniert, muss man andere Wege gehen, um mehr Informationen zu den Queries welche man an SQL Azure schickt zu bekommen. Ich möchte zeigen wie man mit dem SQL Management Studio 2008 R2 an diese Informationen kommt. Man kann einfach im Query Windows das Kommando “SET STATISTICS TIME ON” und/oder “SET STATISTICS IO ON” damit der Server entsprechende Informationen in den Ergebnismengen zurückliefert. Man kann diese Information auch im SQL Management Studio für alle Queries im User Interface aktivieren. Im SQL Management Studio über Tools Options im folgenden Dialog die Einstellungen wie abgebildet vornehmen:

image

Wenn man jetzt ein Query ausführt kommen folgende Informationen auch noch vom Server zurück:

SQL Server parse and compile time:
   CPU time = 15 ms, elapsed time = 26 ms.

(91 row(s) affected)
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Order Details'. Scan count 1, logical reads 15, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Orders'. Scan count 1, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Customers'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times:
   CPU time = 16 ms,  elapsed time = 10 ms.
SQL Server parse and compile time:
   CPU time = 0 ms, elapsed time = 0 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms
.

Das gibt zwar schon mal was her ist aber noch nicht so das was man gerne haben würde. Nämlich wie wird das Query eigentlich umgesetzt welche Indizes werden genutzt, gibt es Table Scans die man durch zusätzliche Indizes vermeiden könnte …

Dazu kann man sich erstmal den “estimated execution plan” anzeigen lassen, Das geht in dem man auf den folgenden Button in der Toolbar klickt:

image

Dann bekommt man für mein Beispielquery auf die alte Northwind Demo DB :

image

Jetzt kann man sich noch den tatsächlichen “execution plan” anzeigen lassen und die Client Statistics aktivieren, wiederum über die Toolbar:

image

Dann bekommt auch die Client Statistics in einem weiteren Reiter im Ergebnisfenster angezeigt. Nach mehreren Durchläufen auch mit den Unterschieden der einzelnen Läufe:

image

Zum Schluss noch ein Tipp wie man sich den “Procedure Cache” anschauen kann. Auf die Art und Weise lässt sich bestimmen welches Kommando bzw.welche Stored Procedure wie oft aufgerufen wurde. Das geht über ein spezielles T-SQL Kommando das dann etwa so aussehen könnte:

SELECT q.text, s.execution_count
FROM sys.dm_exec_query_stats as s
cross apply sys.dm_exec_sql_text(plan_handle) AS q
ORDER BY s.execution_count DESC

und man bekommt so ein Ergebnis:

image

Wer sich die ganze verfügbaren Infos im Procedure Cache anschauen möchte sollte einfach mal das folgende T-SQL Statement absetzen und die Ergebnisse studieren.

SELECT * FROM sys.dm_exec_query_stats

Viele Grüße

Martin Vollmer