Optimieren der SQL-Ablaufverfolgung

Gilt für:SQL Server

Obwohl SQL Trace mit Leistungseinbußen verbunden ist, weil dabei Systemressourcen zum Sammeln von Daten verwendet werden, können Sie vieles tun, um diese zu minimieren. Um die durch eine Ablaufverfolgung verursachten Leistungseinbußen zu minimieren, versuchen Sie Folgendes:

  • Erwägen Sie, die Eingabeaufforderung zum Ausführen von Ablaufverfolgungen zu verwenden. Das Verwenden einer grafischen Benutzeroberfläche beeinträchtigt die Leistung. Weitere Informationen finden Sie unter sp_trace_create (Transact-SQL).

  • Vermeiden Sie das Einbeziehen von Ereignissen, die häufig auftreten. Schränken Sie die Nachverfolgung nach Möglichkeit mithilfe spezifischer Ereignisklassen und Filter ein. Durch weniger gesammelte Ablaufverfolgungsereignisse werden weniger Systemressourcen für die Unterstützung der Ablaufverfolgung benötigt.

  • Fokussieren Sie die Ablaufverfolgung auf das Sammeln derjenigen Ereignisse, die relevante Daten liefern. Wenn Ihre Ablaufverfolgung beispielsweise dazu dient, Deadlocks zu identifizieren, beziehen Sie die Lock:Deadlock-Ereignisklasse ein, nicht aber die Lock:Acquired-Ereignisklasse. Wenn Sie beide Ereignisklassen einbeziehen, muss die Ablaufverfolgung auf jede erworbene Sperre reagieren, und Ihr Ausführungsaufwand verdoppelt sich.

  • Vermeiden Sie das Sammeln doppelter Daten. Wenn Sie beispielsweise SQL:BatchStarted und SQL:BatchCompletedsammeln, können Sie die Größe des Ergebnissatzes durch das ausschließliche Sammeln von Textdaten für die SQL:BatchStarted -Ereignisklasse minimieren.

  • Verwenden Sie in der Ablaufverfolgungsdefinition Filter. Wenn Sie beispielsweise wissen, dass ein bestimmter Benutzer eine langsame Ausführung während Ad-hoc-Abfragen berichtet, erstellen Sie einen Filter für LoginName. Richten Sie den Filter so ein, dass nur Ereignisse einbezogen werden, in denen LoginName mit dem Benutzernamen übereinstimmt.

Wenn Sie eine Ablaufverfolgung für Ereignisse ausführen müssen, die signifikante Auswirkungen auf die Leistung haben, können Sie mithilfe einer der folgenden Methoden den Leistungsverlust auf dem Server begrenzen:

  • Führen Sie Traces über kürzere Zeiträume aus. Sie können steuern, wie lange eine Nachverfolgung ausgeführt wird, indem Sie eine Endzeit aktivieren. Dies ist besonders wichtig, wenn Sie nicht die Ereignisklassen begrenzen oder ein Ereignis filtern können. Die Aktivierung einer Endzeit stellt sicher, dass die dadurch verursachte Leistungsbeeinträchtigung nicht unbegrenzt andauert.

  • Begrenzen Sie die Größe der Ablaufverfolgungsergebnisse. Sie können die Größe der Ablaufverfolgungsergebnisse auf eine maximale Dateigröße beschränken. Durch diese Strategie wird sichergestellt, dass die Leistungseinbußen stoppen, wenn die Dateigrößengrenze erreicht wird (wenn kein Dateirollover aktiviert ist).

  • Schränken Sie die Anzahl der zurückgegebenen Ereignisse ein. Mithilfe von SQL Server Profiler können Sie die Anzahl der zurückgegebenen Ereignisse begrenzen, indem Sie die Ablaufverfolgung in einer Tabelle speichern und die maximale Zeilenanzahl festlegen. Die Ablaufverfolgungsergebnisse werden auch dann noch im SQL Server Profiler angezeigt, wenn die maximale Anzahl von Zeilen erreicht ist; der Aufwand für das Speichern der Ergebnisse in einer Tabelle entfällt.