Alexander Förster

Um Performance-Engpässe auf SQL Servern zu lokalisieren, stehen Entwicklern vielfältige Möglichkeiten zur Verfügung. Wenn es jedoch darum geht, auf die Schnelle eine übersichtliche Auswertung zu erstellen, sind die meisten Werkzeuge überdimensioniert. Daher möchte ich im Folgenden eine einfache Lösung vorstellen, die auf zwei gängigen Anwendungen beruht.

Bei der einen handelt es sich um den SQL Profiler, der bereits seit Version 2005 Bestandteil des SQL Servers ist. Richtig eingesetzt, kann er viele hilfreiche Informationen liefern. Hinzu kommt mit Perfmon die Leistungsüberwachung des Betriebssystems. In Kombination ermöglichen die beiden Tools leicht lesbare Analysen, die Aufschlüsse über das verwendete Setup und letztendlich Performance-Engpässe geben.

Profiler und Perfmon kombinieren

In erster Linie geht es darum, die Log-Sammlungen von Profiler und Perfmon miteinander zu verbinden. Für die Datenspeicherung auf dem SQL Server habe ich ein einfaches Trace-Template erstellt:

TSQL Trace Blocking

Hier werden die wichtigsten SQL-Server-Events aufgezeichnet:

Locks DeadlockGraph
Performance Showplan XML
Stored Procedures RPC:Completed
SP:StmtCompleted
TSQL SQL:BatchCompleted
SQL:BatchStarting

 

Danach blende ich im Profiler alle verfügbaren Spalten ein. Für die Leistungsüberwachung nutze ich folgendes Template:

Perfmon

Hier sind als Leistungsindikatoren folgende Werte festgelegt:

System Prozessor Warteschlange
Arbeitsspeicher Seiten/s
Logischer Datenträger Zeit%
Aktuelle Warteschleifenvorgänge
Arbeitsspeicher Verfügbare MB

 

Das Template für den SQL Profiler lässt sich durch einen einfachen Doppelklick hinzufügen und nach der Verbindung zu dem gewünschten SQL Server starten. Folgende Punkte sind dabei zu beachten:

1. Den Profiler nicht auf dem SQL Server ausführen. Sonst werden die Ergebnisse verfälscht und der Server unnötig belastet.
2. Den Trace auf einem Laufwerk loggen, das ausreichend Platz bietet.

Das Template für den Performance-Monitor kann während der Erstellung der Leistungsüberwachung importiert werden. Hierzu öffne ich den Leistungsmonitor (Ausführen: perfmon.exe). Dann selektiere ich in der Hauptmaske die Datensammlersätze und lege eine neue Datensammlung an:

Perfmon1

Ich vergebe einen Namen für die Datensammlung und wähle auf der nächsten Seite die Vorlage aus:

Perfmon2

Zudem kann ein Speicherort ausgewählt werden. Idealerweise handelt es sich um kein Datenbanklaufwerk. Vielmehr ist ein Speicherort sinnvoll, der keine Datenbanken und/oder Systemdaten enthält.

Perfmon3

Analyse der Performance-Engpässe

Sobald alle Konfigurationen getätigt sind, kann Perfmon die Daten sammeln. Danach geht es an die Auswertung. Hierzu öffne ich wieder den Profiler-Trace mit einem Doppelklick. Daraufhin wir der erstellte Trace sichtbar:

trace1

Über File Import Performance Data lässt sich nun das Perfmonance-Trace hinzufügen:

trace2

Hier werden dann die Performance Counter ausgewählt:

trace3

Umgehend erhalte ich ein Bild über die Vorgänge auf dem Server:

Performance-Engpässe auf dem SQL-Server.

Für die Auswertungen bietet sich an, die einzelnen Counter separat ein bzw. auszuschalten. Durch klicken auf die Ausschläge im Grafen gelange ich direkt zu den verursachenden SQL-Statements und kann somit die Performance-Engpässe analysieren.