Share via


Anzeigen und Analysieren von Ablaufverfolgungen mit SQL Server Profiler

Mit SQL Server Profiler können Sie die aufgezeichneten Ereignisdaten in einer Ablaufverfolgung anzeigen. In SQL Server Profiler werden die Daten auf der Grundlage der für die Ablaufverfolgung festgelegten Eigenschaften angezeigt. Eine Möglichkeit, SQL Server-Daten zu analysieren, besteht darin, die Daten in ein anderes Programm wie SQL Server oder den Optimierungsratgeber von Database Engine (Datenbankmodul) zu kopieren. Wenn bei der Ablaufverfolgung die Text-Datenspalte einbezogen wird, kann der Optimierungsratgeber von Database Engine (Datenbankmodul) eine Ablaufverfolgungsdatei mit SQL-Batch- und RPC-Ereignissen verwenden. Weitere Informationen finden Sie unter Optimieren des physischen Datenbankentwurfs. Verwenden Sie die im Lieferumfang von SQL Server Profiler enthaltene vordefinierte Optimierungsvorlage, um sicherzustellen, dass für den Optimierungsratgeber von Database Engine (Datenbankmodul) die richtigen Ereignisse und Spalten aufgezeichnet werden.

Wenn Sie mit SQL Server Profiler eine Ablaufverfolgung aufrufen und die Ablaufverfolgungsdatei durch gespeicherte Systemprozeduren von SQL Server Profiler oder der SQL-Ablaufverfolgung erstellt wurde, muss diese Datei nicht die Dateierweiterung TRC tragen.

HinweisHinweis

SQL Server Profiler kann auch Protokolldateien der SQL-Ablaufverfolgung sowie allgemeine SQL-Skriptdateien lesen. Wenn Sie eine Protokolldatei der SQL-Ablaufverfolgung öffnen, die nicht die Dateierweiterung LOG aufweist (z. B. trace.txt), legen Sie als Dateiformat SQLTrace_Log fest.

Um die Ablaufverfolgungsanalyse zu erleichtern, können Sie das Anzeigeformat für Datum und Uhrzeit in SQL Server Profiler konfigurieren.

Problembehandlung von Daten

Mit SQL Server Profiler können Sie die Problembehandlung für Daten ausführen, indem Sie Ablaufverfolgungen oder Ablaufverfolgungsdateien nach der Datenspalte Duration, CPU, Reads oder Writes in Gruppen zusammenfassen. Zu den Daten, für die Sie eine Problembehandlung durchführen können, gehören beispielsweise Abfragen, deren Ergebnisse nicht zufrieden stellend ausfallen, oder die eine außergewöhnlich hohe Anzahl logischer Lesevorgänge aufweisen.

Zusätzliche Informationen stehen zur Verfügung, wenn die Ablaufverfolgungen in Tabellen gespeichert werden und Transact-SQL für die Abfrage der Ereignisdaten verwendet wird. Wenn Sie z. B. feststellen möchten, welche SQL:BatchCompleted-Ereignisse eine überlange Wartezeit aufweisen, führen Sie Folgendes aus:

SELECT  TextData, Duration, CPU
FROM    trace_table_name
WHERE   EventClass = 12 -- SQL:BatchCompleted events
AND     CPU < (Duration * 1000)
HinweisHinweis

Seit SQL Server 2005 meldet der Server die Dauer eines Ereignisses in Mikrosekunden (ein Millionstel oder 10-6 einer Sekunde) und den Umfang der vom Ereignis verbrauchten CPU-Zeit in Millisekunden (ein Tausendstel oder 10-3 einer Sekunde). In SQL Server 2000 meldete der Server sowohl die Dauer als auch die CPU-Zeit in Millisekunden. Seit SQL Server 2005 und höher zeigt die grafische Benutzeroberfläche von SQL Server Profiler die Duration-Spalte standardmäßig in Millisekunden an. Wird jedoch eine Ablaufverfolgung entweder in einer Datei oder in einer Datenbanktabelle gespeichert, wird der Wert der Duration-Spalte in Mikrosekunden aufgezeichnet.

Anzeigen von Objektnamen bei der Anzeige von Ablaufverfolgungen

Wenn Sie statt des Objektbezeichners (ObjectID) lieber den Namen eines Objekts anzeigen möchten, müssen Sie zusammen mit der ObjectName-Datenspalte auch die Datenspalten ServerName und DatabaseID aufzeichnen.

Wenn auf der Grundlage der ObjectID-Datenspalte gruppiert werden soll, stellen Sie sicher, dass Sie zuerst nach den Datenspalten ServerName und DatabaseID und erst dann nach der ObjectID-Datenspalte gruppieren. Analog müssen Sie, wenn Sie auf der Grundlage der IndexID-Datenspalte gruppieren möchten, sicherstellen, dass Sie zuerst nach den Datenspalten ServerName, DatabaseID und ObjectID und erst dann nach der IndexID-Datenspalte gruppieren. Diese Reihenfolge muss beim Gruppieren eingehalten werden, weil die Objekt- und Index-IDs für die verschiedenen Server und Datenbanken (und die Index-IDs für die verschiedenen Objekte) nicht eindeutig erkennbar sind.

Suchen nach bestimmten Ereignissen in einer Ablaufverfolgung

Gehen Sie wie folgt vor, um in einer Ablaufverfolgung nach Ereignissen zu suchen und diese zu gruppieren:

  1. Erstellen Sie eine Ablaufverfolgung.

    • Zeichnen Sie beim Definieren der Ablaufverfolgung neben allen anderen gewünschten Datenspalten auch die Datenspalten EventClass, ClientProcessID und StartTime auf. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen einer Ablaufverfolgung (SQL Server Profiler).

    • Gruppieren Sie die aufgezeichneten Daten nach der EventClass-Datenspalte, und zeichnen Sie die Ablaufverfolgung in einer Datei oder Tabelle auf. Um die aufgezeichneten Daten zu gruppieren, klicken Sie im Dialogfeld Ablaufverfolgungseigenschaften auf der Registerkarte Ereignisauswahl auf Spalten organisieren. Weitere Informationen finden Sie unter Vorgehensweise: Organisieren von in einer Ablaufverfolgung angezeigten Spalten (SQL Server Profiler).

    • Starten Sie die Ablaufverfolgung, und beenden Sie sie nach Ablauf der festgelegten Zeit oder nach Erfassung der festgelegten Anzahl von Ereignissen.

  2. Suchen Sie nach den Zielereignissen.

  3. Zeigen Sie die Ereignisse im Kontext an.

    • Zeigen Sie die Eigenschaften der Ablaufverfolgung an, und gruppieren Sie die Daten nicht auf der Grundlage der EventClass-Datenspalte, sondern nach der ClientProcessID-Datenspalte.

    • Erweitern Sie die Knoten für jede einzelne Clientprozess-ID, die Sie anzeigen möchten. Durchsuchen Sie die Ablaufverfolgung manuell oder mithilfe der Option Suchen, bis Sie die zuvor notierten StartTime-Werte der Zielereignisse finden. Die Ereignisse werden in chronologischer Reihenfolge mit den anderen Ereignissen angezeigt, die zu den ausgewählten Clientprozess-IDs gehören. So folgen z. B. das Deadlock- und das Deadlock Chain-Ereignis, die in der Ablaufverfolgung aufgezeichnet sind, unmittelbar auf die SQL:BatchStarting-Ereignisse in der erweiterten Clientprozess-ID.

Diese Methode kann auch verwendet werden, um nach anderen gruppierten Ereignissen zu suchen. Sobald Sie die gesuchten Ereignisse gefunden haben, gruppieren Sie diese nach der Ereignisklasse ClientProcessID, ApplicationName oder einer anderen Ereignisklasse, um zugehörige Aktivitäten in chronologischer Reihenfolge anzuzeigen.