Schnellstart: Erweiterte Ereignisse

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

Bei erweiterten Ereignissen handelt es sich um ein ressourcenschonendes Feature zur Leistungsüberwachung, mit dem sich Daten erfassen lassen, um Probleme zu überwachen und zu behandeln. Mithilfe von erweiterten Ereignissen können Sie Details zu internen Vorgängen der Datenbank-Engine anzeigen, die für die Leistungsüberwachung und Problembehandlung relevant sind. Weitere Informationen zu erweiterten Ereignissen finden Sie unter Übersicht über erweiterte Ereignisse.

Dieser Artikel soll SQL-Administrator*innen, Techniker*innen und Entwickler*innen helfen, die mit erweiterten Ereignissen noch nicht vertraut sind und die in wenigen Minuten mit deren Nutzung und der Anzeige von Ereignisdaten beginnen möchten.

Erweiterte Ereignisse werden auch als XEvents und manchmal einfach als XE bezeichnet.

In diesem Artikel wird Folgendes vermittelt:

  • Erfahren Sie, wie Sie eine Ereignissitzung in SQL Server Management Studio (SSMS) mit Beispielfotos erstellen.
  • Korrelieren Sie Screenshots mit entsprechenden Transact-SQL-Anweisungen.
  • Verstehen Sie ausführlich die Begriffe und Konzepte hinter der SSMS-Benutzeroberfläche und den XEvents T-SQL-Anweisungen.
  • Erfahren Sie, wie Sie Ihre Ereignissitzung testen.
  • Die Sitzungsergebnisse, darunter:
    • Verfügbare Optionen für die Ergebnisspeicherung
    • Verarbeitete Ergebnisse im Vergleich zu unverarbeiteten Ergebnissen
    • Tools zum Anzeigen der Ergebnisse auf verschiedene Art und in unterschiedlichen Zeitskalen
  • Erfahren Sie, wie Sie nach allen verfügbaren Ereignissen suchen und ermitteln können.
  • Grundlegendes zu den Beziehungen zwischen erweiterten Ereignissystemansichten.

Tipp

Weitere Informationen zu erweiterten Ereignissen in Azure SQL-Datenbank, einschließlich Codebeispielen, finden Sie unter Erweiterte Ereignisse in Azure SQL-Datenbank und Azure SQL Managed Instance.

Voraussetzungen

Zunächst müssen Sie folgende Aufgaben erledigen:

  • Herunterladen von SQL Server Management Studio (SSMS) Es wird empfohlen, eine aktuelle Version von SSMS mit den neuesten Verbesserungen und Problembehebungen zu verwenden.
  • Stellen Sie sicher, dass Ihr Konto CREATE ANY EVENT SESSION über (in SQL Server 2022 eingeführt) oder ALTER ANY EVENT SESSION über Serverberechtigungen verfügt.
  • Darüber hinaus erfordert die Anmeldung bei Verwendung von SSMS und zum Anzeigen von Sitzungen, die erstellt werden, die Berechtigung VIEW SERVER PERFORMANCE STATE.

Im Anhang am Ende dieses Artikels sind weitere, auf erweiterte Ereignisse bezogene Details zur Sicherheit und zu Berechtigungen verfügbar.

Erweiterte Ereignisse in SSMS

SSMS stellt eine voll funktionsfähige Benutzeroberfläche für erweiterte Ereignisse bereit. Viele Szenarien können mithilfe dieser Benutzeroberfläche durchgeführt werden, ohne T-SQL oder dynamische Verwaltungssichten (Dynamic Management Views, DMVs) verwenden zu müssen.

Im nächsten Abschnitt werden die Schritte in der Benutzeroberfläche veranschaulicht, mit deren Hilfe eine Sitzung für erweiterte Ereignisse erstellt und die gemeldeten Daten angezeigt werden. Nachdem Sie die Schritte selbst durchgearbeitet oder in diesem Artikel nachgelesen haben, können Sie sich über die Konzepte der einzelnen Schritte informieren, um ein tieferes Verständnis zu erlangen.

Erstellen einer Ereignissitzung in SMSS

Wenn Sie eine Sitzung für erweiterte Ereignisse erstellen, teilen Sie dem System Folgendes mit:

  • Welche Ereignisse Sie interessieren.
  • Auf welche Weise Ihnen das System die Daten melden soll.

In der Demonstration wird das Dialogfeld Neue Sitzung geöffnet und gezeigt, wie die vier wie folgt benannten Seiten zu verwenden sind:

  • Allgemein
  • Ereignisse
  • Datenspeicherung
  • Erweitert

Der Text und unterstützende Screenshots können von Ihrer SSMS-Version geringfügig abweichen, sollten aber für die Erläuterung grundlegender Konzepte dennoch relevant sein.

  1. Stellen Sie eine Verbindung zu einer Instanz der Datenbank-Engine her. Erweiterte Ereignisse werden ab SQL Server 2014 (12.x) in Azure SQL-Datenbank und Azure SQL Managed Instance unterstützt.

  2. Wählen Sie in Objekt-Explorer Verwaltung > Erweiterte Ereignisse aus. In Azure SQL-Datenbank sind Ereignissitzungen datenbankbezogen, sodass die Option Erweiterte Ereignisse nicht unter Verwaltung zu finden ist, sondern unter den einzelnen Datenbanken.

  3. Klicken Sie mit der rechten Maustaste auf den Ordner "Sitzungen", und wählen Sie "Neue Sitzung" aus. Das Dialogfeld "Neue Sitzung..." ist dem Assistenten für neue Sitzungen vorzuziehen, obwohl die beiden ähnlich sind.

    Tipp

    Drücken Sie in diesen Lernprogrammschritten erst OK , wenn Sie alle vier Seiten durchlaufen haben: Allgemein, Ereignisse, Datenspeicher und Erweitert.

  4. Wählen Sie die Seite Allgemein aus. Geben Sie anschließend YourSession oder einen beliebigen Namen in das Textfeld Sitzungsname ein. Wählen Sie OK noch nicht aus, da Sie auf anderen Seiten noch weitere Details eingeben müssen.

  5. Wählen Sie die Seite Ereignisse aus.

  6. Wählen Sie im Bereich Ereignisbibliothek in der Dropdownliste Nur Ereignisnamen aus.

    • Geben Sie sql_statement in das Textfeld ein. Dadurch wird die Liste so gefiltert, dass nur Ereignisse mit sql_statement im Namen angezeigt werden.
    • Scrollen Sie, und wählen Sie das Ereignis mit dem Namen sql_statement_completed aus.
    • Wählen Sie den Pfeil nach rechts > aus, um das Ereignis in das Feld Ausgewählte Ereignisse zu verschieben.
  7. Wählen Sie auf der Seite Ereignisse die Schaltfläche Konfigurieren aus. Dadurch wird das Feld Optionen für die Ereigniskonfiguration für die ausgewählten Ereignisse geöffnet.

    Screenshot der Option

  8. Wählen Sie die Registerkarte "Filter" (Prädikat) aus. Wählen Sie als Nächstes die neue Filterzeile aus, die besagt , dass Sie hier klicken, um eine Klausel hinzuzufügen. In diesem Lernprogramm wird dieser Filter (auch als Prädikat bezeichnet) so konfiguriert, dass alle SELECT Anweisungen mit einer HAVING Klausel erfasst werden.

  9. Wählen Sie in der Dropdownliste Feld den Eintrag sqlserver.sql_text aus.

    • Wählen Sie für Operator die Option like_i_sql_unicode_string aus. i im Namen des Operators bedeutet hier, dass die Groß-/Kleinschreibung nicht beachtet wird.
    • Geben Sie %SELECT%HAVING% als Wert ein. Hier sind Prozentzeichen (%) Wildcards, die für eine beliebige Zeichenfolge stehen.

    Hinweis

    Im zweiteiligen Namen des Felds stellt sqlserver den Paketnamen und sql_text den Feldnamen dar. Das zuvor von Ihnen ausgewählte Ereignis, sql_statement_completed, muss sich im selben Paket wie das ausgewählte Feld befinden.

    Screenshot von „Neue Sitzung“ > „Ereignisse“ > „Konfigurieren“ > „Filter (Prädikat)“ > „Feld“.

  10. Wählen Sie die Seite Datenspeicherung aus.

  11. Wählen Sie im Bereich "Ziele" die neue Zeile "Zieltyp" aus, die besagt, dass Sie hier klicken, um ein Ziel hinzuzufügen. In diesem Lernprogramm schreiben wir unsere erfassten erweiterten Ereignisdaten in eine Ereignisdatei. Das bedeutet, dass die Ereignisdaten in einer Datei gespeichert werden, die wir später öffnen und anzeigen können. Ab SQL Server 2019 (15.x) können Auch Ereignisdaten geschrieben werden, die in Azure Storage gespeichert werden, der Standard in Azure SQL.

    • Wählen Sie in der Dropdownliste Typ den Eintrag event_file.
  12. Geben Sie im Bereich Eigenschaften den vollständigen Pfad und Namen in das Textfeld Dateiname auf Server ein. Sie können dazu auch die Schaltfläche Durchsuchen verwenden. Das Suffix muss xel lauten. In unserem Beispiel haben wir verwendet C:\temp\YourSession_Target.xel.

    Screenshot von „Neue Sitzung“ > „Datenspeicherung“ > „Ziele“ > „Typ“ > „event_file“.

  13. Wählen Sie die Seite Erweitert aus. Standardmäßig sollte dieses .xel-Ziel der erweiterten Ereignissitzung minimale oder keine Auswirkungen auf die Serverleistung haben, aber diese Einstellungen auf der Seite "Erweitert " können verwendet werden, um die Ressourcen und Latenz zu erhöhen oder zu verringern.

    Screenshot der erweiterten neuen Sitzung > .

  14. Wählen Sie unten die Schaltfläche OK aus, um diese Ereignissitzung zu erstellen.

  15. Wieder im SSMS-Objekt-Explorer öffnen oder aktualisieren Sie den Ordner "Sitzungen", und sehen Sie sich den neuen Knoten für die YourSession Sitzung für erweiterte Ereignisse an. Die Sitzung wurde noch nicht gestartet. In diesem Lernprogramm beginnen wir es später.

Bearbeiten einer Ereignissitzung in SMSS

Im Objekt-Explorer von SSMS können Sie die Ereignissitzung bearbeiten, indem Sie mit der rechten Maustaste auf den entsprechenden Knoten klicken und anschließend Eigenschaften auswählen. Dasselbe mehrseitige Dialogfeld wird angezeigt.

Erstellen einer Ereignissitzung mit T-SQL

In SSMS können Sie ein T-SQL-Skript generieren, um Ihre Ereignissitzung wie folgt zu erstellen:

  • Klicken Sie mit der rechten Maustaste auf den Knoten der Ereignissitzung, und wählen Sie anschließend Sitzung ausarbeiten als > Erstellen (CREATE) in > Zwischenablage aus.
  • Fügen Sie die Auswahl in einen beliebigen Text-Editor ein.

Nachfolgend ist die generierte T-SQL-Anweisung CREATE EVENT SESSION für YourSession aufgeführt:

CREATE EVENT SESSION [YourSession]
    ON SERVER -- For SQL Server and Azure SQL Managed Instance
    -- ON DATABASE -- For Azure SQL Database
    ADD EVENT sqlserver.sql_statement_completed
    (
        ACTION(sqlserver.sql_text)
        WHERE
        ( [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text], N'%SELECT%HAVING%')
        )
    )
    ADD TARGET package0.event_file 
    (SET filename=N'C:\temp\YourSession_Target.xel');
GO

Hinweis

Verwenden Sie ON DATABASE in Azure SQL-Datenbank anstelle von ON SERVER.

Bedingtes Löschen (DROP) der Ereignissitzung

Vor der Anweisung CREATE EVENT SESSION können Sie eine DROP EVENT SESSION-Anweisung bedingt ausführen, falls eine Sitzung mit demselben Namen bereits vorhanden ist. Dadurch wird die vorhandene Sitzung gelöscht. Ohne diese Anweisung verursacht der Versuch, eine Sitzung mit demselben Namen zu erstellen, einen Fehler.

IF EXISTS (SELECT *
      FROM sys.server_event_sessions
      WHERE name = 'YourSession')
BEGIN
    DROP EVENT SESSION YourSession
          ON SERVER;
END
GO

Starten und Beenden der Ereignissitzung mit T-SQL

Wenn Sie eine Ereignissitzung erstellen, wird sie gemäß der Standardeinstellung nicht automatisch gestartet. Die Ereignissitzung können Sie jederzeit mithilfe der folgenden T-SQL-Anweisung ALTER EVENT SESSION starten oder beenden.

ALTER EVENT SESSION [YourSession]
      ON SERVER
    STATE = START; -- STOP;

Sie können die Ereignissitzung so konfigurieren, dass sie beim Start der Instanz der Datenbank-Engine automatisch startet. Siehe das Schlüsselwort STARTUP STATE = ON in CREATE EVENT SESSION.

Die Benutzeroberfläche von SSMS bietet ein entsprechendes Kontrollkästchen namens Ereignissitzung beim Serverstart starten auf der Seite Neue Sitzung > Allgemein.

Testen einer Ereignissitzung

Die Ereignissitzung können Sie mithilfe der folgenden Schritte testen:

  1. Klicken Sie in Objekt-Explorer mit der rechten Maustaste auf den Knoten der Ereignissitzung, und wählen Sie dann Sitzung starten aus.
  2. Führen Sie die folgende SELECT...HAVING-Anweisung ein paar Mal aus, während Sie mit demselben Server (oder derselben Datenbank in Azure SQL-Datenbank) verbunden sind, auf dem Sie bzw. in der Sie die Ereignissitzung erstellt haben. Erwägen Sie, den Wert in der HAVING-Klausel für jede Ausführung zu ändern und dabei zwischen 2 und 3 zu wechseln. Dadurch können Sie die Unterschiede in den Ergebnissen erkennen.
  3. Klicken Sie mit der rechten Maustaste auf den Sitzungsknoten, und wählen Sie dann Sitzung beenden aus.
  4. Lesen Sie den nächsten Unterabschnitt zum Auswählen und Anzeigen der Ergebnisse.
SELECT c.name,
    COUNT(*) AS [Count-Per-Column-Repeated-Name]
FROM sys.syscolumns AS c
INNER JOIN sys.sysobjects AS o
    ON o.id = c.id
WHERE o.type = 'V'
    AND c.name LIKE '%event%'
GROUP BY c.name
HAVING Count(*) >= 3 --2     -- Try both values during session.
ORDER BY c.name;

Zur Vollständigkeit ist hier die Beispielausgabe aus der vorherigen SELECT...HAVING-Anweisung aufgeführt.

/* Approximate output, 6 rows, all HAVING Count >= 3:
name                   Count-Per-Column-Repeated-Name
---------------------  ------------------------------
event_group_type       4
event_group_type_desc  4
event_session_address  5
event_session_id       5
is_trigger_event       4
trace_event_id         3
*/

Anzeigen von Ereignissitzungsdaten als XML

Führen Sie in einem Abfragefenster in SSMS die folgende SELECT-Anweisung aus, um die von der Sitzung erfassten Ereignisdaten anzuzeigen. Jede Zeile stellt ein Ereignis dar. Durch die CAST(... AS xml)-Anweisung wird der Datentyp der Spalte von nvarchar in xml geändert. So können Sie den Spaltenwert auswählen, um ihn zur leichteren Lesbarkeit in einem neuen Fenster zu öffnen.

Hinweis

Beim event_file-Ziel wird immer ein numerischer Teil in den xel-Dateinamen eingefügt. Bevor Sie die folgende Abfrage ausführen können, müssen Sie den vollständigen Namen der xel-Datei einschließlich des numerischen Teils kopieren und in die SELECT-Anweisung einfügen. Im folgenden Beispiel lautet der numerische Teil _0_131085363367310000.

SELECT object_name,
    file_name,
    file_offset,
    event_data,
    'CLICK_NEXT_CELL_TO_BROWSE_XML RESULTS!' AS [CLICK_NEXT_CELL_TO_BROWSE_XML_RESULTS],
    CAST(event_data AS XML) AS [event_data_XML]
-- TODO: In the SSMS results grid, click this XML cell
FROM sys.fn_xe_file_target_read_file(
    'C:\Temp\YourSession_Target_0_131085363367310000.xel', NULL, NULL, NULL
);

Diese Abfrage bietet zwei Möglichkeiten, die vollständigen Ergebnisse einer Ereigniszeile anzuzeigen:

  • Führen Sie die SELECT-Anweisung in SSMS aus, und wählen Sie dann in der Spalte event_data_XML eine Zelle aus.

  • Kopieren Sie die XML-Zeichenfolge aus einer Zelle in die Spalte event_data. Fügen Sie sie in einen einfachen Text-Editor wie den Windows-Editor ein, und speichern Sie die Datei mit der Erweiterung xml. Öffnen Sie die Datei dann in einem Browser oder einem Editor, der XML-Daten anzeigen kann.

Ereignisdaten in XML

Als Nächstes wird ein Teil der Ergebnisse im XML-Format angezeigt. Der folgende XML-Code ist aus Platzgründen bearbeitet. <data name="row_count"> zeigt den Wert 6, was den zuvor angezeigten sechs Ergebniszeilen entspricht. Außerdem ist die vollständige SELECT-Anweisung zu sehen.

<event name="sql_statement_completed" package="sqlserver" timestamp="2016-05-24T04:06:08.997Z">
  <data name="duration">
    <value>111021</value>
  </data>
  <data name="cpu_time">
    <value>109000</value>
  </data>
  <data name="physical_reads">
    <value>0</value>
  </data>
  <data name="last_row_count">
    <value>6</value>
  </data>
  <data name="offset">
    <value>0</value>
  </data>
  <data name="offset_end">
    <value>584</value>
  </data>
  <data name="statement">
    <value>SELECT c.name,
            COUNT(*) AS [Count-Per-Column-Repeated-Name]
        FROM sys.syscolumns AS c
        INNER JOIN sys.sysobjects AS o
            ON o.id = c.id
        WHERE o.type = 'V'
            AND c.name LIKE '%event%'
        GROUP BY c.name
        HAVING Count(*) >= 3 --2     -- Try both values during session.
    ORDER BY c.name;</value>
      </data>
</event>

Anzeigen von Ereignissitzungsdaten in SSMS

Die Benutzeroberfläche von SSMS verfügt über zahlreiche Features, mit denen Sie die Daten anzeigen können, die von einer Ereignissitzung erfasst werden. Weitere Informationen finden Sie unter Anzeigen von Ereignisdaten in SQL Server Management Studio.

Ausgangspunkt sind die Optionen Zieldaten anzeigen und Livedaten anzeigen im Kontextmenü.

Anzeigen von Zieldaten

Im SSMS-Objekt-Explorer können Sie mit der rechten Maustaste auf den Zielknoten klicken, der sich unter Ihrem Ereignissitzungsknoten befindet, z. B. package0.event_counter. Wählen Sie im Kontextmenü Zieldaten anzeigen aus. Die Daten werden von SSMS angezeigt.

Die Anzeige wird nicht aktualisiert, da neue Ereignisse in einer Sitzung auftreten. Sie können jedoch erneut Zieldaten anzeigen auswählen.

Anzeigen von Livedaten

Im Objekt-Explorer von SSMS können Sie mit der rechten Maustaste auf Ihren Sitzungsereignisknoten klicken. Wählen Sie im Kontextmenü Livedaten anzeigen aus. Eingehende Daten werden beim Eintreffen von SSMS in Echtzeit angezeigt.

Begriffe und Konzepte für erweiterte Ereignisse

In der folgenden Tabelle sind die für erweiterte Ereignisse verwendeten Begriffe aufgeführt. Zudem wird ihre jeweilige Bedeutung beschrieben.

Begriff Beschreibung
event session Ein Konstrukt, das um mindestens ein Ereignis angeordnet ist, sowie unterstützende Elemente (wie Aktionen) stellen Ziele dar. Mit der Anweisung CREATE EVENT SESSION wird jeweils eine Ereignissitzung erstellt. Mithilfe der ALTER-Anweisung können Sie eine Ereignissitzung nach Bedarf starten und beenden.

Eine Ereignissitzung wird gelegentlich nur als Sitzungbezeichnet, wenn der Kontext verdeutlicht, dass es sich um eine Ereignissitzunghandelt.
Weitere Details zu Ereignissitzungen finden Sie unter Sitzungen für erweiterte Ereignisse.
event Ein bestimmtes Vorkommen im System, das von einer aktiven Ereignissitzung überwacht wird.

Das Ereignis sql_statement_completed stellt z. B. den Zeitpunkt dar, zu dem eine gegebene T-SQL-Anweisung abgeschlossen wird. Das Ereignis kann seine Dauer und andere Daten melden.
target Ein Element, das die Ausgabedaten eines erfassten Ereignisses empfängt. Das Ziel zeigt Ihnen die Daten an.

Beispiele hierfür sind das weiter oben in diesem Schnellstart verwendete event_file-Ziel und das ring_buffer-Ziel, das die neuesten Ereignisse im Arbeitsspeicher speichert.
Für jede Ereignissitzung können alle Arten von Zielen verwendet werden. Details finden Sie unter Ziele für erweiterte Ereignisse.
action Ein Feld, das dem Ereignis bekannt ist. Daten aus dem Feld werden an das Ziel gesendet. Das Aktionsfeld ist eng mit dem Prädikatfilterverknüpft.
predicate oder Filter Ein Test für die Daten in einem Ereignisfeld, der dazu verwendet wird, dass nur eine interessante Teilmenge der Ereignisvorkommen an das Ziel gesendet wird.

Ein Filter kann beispielsweise nur die sql_statement_completed-Ereignisse enthalten, bei denen die T-SQL-Anweisung die Zeichenfolge HAVING enthält.
package Ein Namensqualifizierer, der jedem Element in einem Satz von Elementen angefügt wird, die um einen Kern von Ereignissen herum angeordnet sind.

Beispielsweise kann ein Paket Ereignisse zum T-SQL-Text enthalten. Ein Ereignis könnte sich auf alle T-SQL-Anweisungen in einem Batch beziehen. Unterdessen bezieht sich ein anderes begrenzteres Ereignis auf einzelne T-SQL-Anweisungen. Darüber hinaus gibt es für jede T-SQL-Anweisung started- und completed-Ereignisse.
Zudem befinden sich in dem Paket mit den Ereignissen auch für die Ereignisse geeignete Felder. Die meisten Ziele befinden sich in package0 und werden mit Ereignissen aus vielen anderen Paketen verwendet.

Szenarien für erweiterte Ereignisse und Nutzungsdetails

Es gibt zahlreiche Szenarien für die Nutzung erweiterter Ereignisse zur Überwachung und Problembehandlung der Datenbank-Engine und der Abfrage-Workloads. Die folgenden Artikel enthalten Beispiele mit sperrbezogenen Szenarien:

Ermitteln der in Paketen verfügbaren Ereignisse

Die folgende Anweisung gibt eine Zeile für alle verfügbaren Ereignisse zurück, deren Name die drei Zeichen umfassende Zeichenfolge sql enthält. Sie können die LIKE-Klausel bearbeiten, um nach anderen Ereignisnamen zu suchen. Im Resultset wird auch das Paket angegeben, das das Ereignis enthält.

SELECT -- Find an event you want.
    p.name AS [Package-Name],
    o.object_type,
    o.name AS [Object-Name],
    o.description AS [Object-Descr],
    p.guid AS [Package-Guid]
FROM sys.dm_xe_packages AS p
INNER JOIN sys.dm_xe_objects AS o
    ON p.guid = o.package_guid
WHERE o.object_type = 'event' --'action'  --'target'
    AND p.name LIKE '%'
    AND o.name LIKE '%sql%'
ORDER BY p.name,
    o.object_type,
    o.name;

Das folgende Ergebnisbeispiel zeigt die zurückgegebene Zeile, die hier in das Format von column name = value umgewandelt wurde. Die Daten stammen aus dem sql_statement_completed-Ereignis, das in den vorherigen Beispielschritten verwendet wurde. Die Beschreibung des Objekts (in diesem Beispiel ein Ereignis) dient als Dokumentationszeichenfolge.

Package-Name = sqlserver
object_type  = event
Object-Name  = sql_statement_completed
Object-Descr = Occurs when a Transact-SQL statement has completed.
Package-Guid = 655FD93F-3364-40D5-B2BA-330F7FFB6491

Suchen von Ereignissen über die Benutzeroberfläche von SSMS

Eine weitere Option für die Suche nach Ereignissen anhand des Namens bietet das Dialogfeld Neue Sitzung > Ereignisse >Ereignisbibliothek, das in einem vorhergehenden Screenshot gezeigt wurde. Sie können den Teil eines Ereignisnamens eingeben und damit nach allen übereinstimmenden Ereignisnamen suchen.

Ereignisklassen der SQL-Ablaufverfolgung

Eine Beschreibung der Nutzung erweiterter Ereignisse mit Ereignisklassen und -spalten der SQL-Ablaufverfolgung finden Sie unter: Anzeigen der Entsprechungen von erweiterten Ereignissen für SQL-Ablaufverfolgungsklassen.

Ereignisablaufverfolgung für Windows (Event Tracing for Windows, ETW)

Beschreibungen zur Nutzung erweiterter Ereignisse mit der Ereignisablaufverfolgung für Windows (ETW) finden Sie unter:

Systemereignissitzungen

In SQL Server und Azure SQL Managed Instance werden standardmäßig mehrere Systemereignissitzungen erstellt und so konfiguriert, dass sie beim Start der Datenbank-Engine gestartet werden. Wie bei den meisten Ereignissitzungen verbrauchen sie eine geringe Menge von Ressourcen und wirken sich nicht wesentlich auf die Workload-Leistung aus. Microsoft empfiehlt, diese Sitzungen aktiviert zu lassen und sie weiter auszuführen. Die Integritätssitzungen, insbesondere die system_health-Sitzung, sind häufig nützlich für die Überwachung und Problembehandlung.

Diese Ereignissitzungen können Sie im Objekt-Explorer von SSMS unter Verwaltung > Erweiterte Ereignisse >Sitzungen anzeigen. In SQL Server sind diese Systemereignissitzungen zum Beispiel:

  • AlwaysOn_health
  • system_health
  • telemetry_events

PowerShell-Anbieter

Erweiterte Ereignisse lassen sich mithilfe des Anbieters von SQL Server PowerShell verwalten. Weitere Informationen finden Sie unter Verwenden des PowerShell-Anbieters für erweiterte Ereignisse.

Systemansichten

Die Systemansichten für erweiterte Ereignisse umfassen:

  • Katalogsichten: für Informationen zu Ereignissitzungen, die durch CREATE EVENT SESSION definiert sind.
  • Dynamische Verwaltungssichten (DMVs): für Informationen zu aktiven (gestarteten) Ereignissitzungen.

SELECT- und JOIN-Anweisungen aus Systemsichten für erweiterte Ereignisse in SQL Server – stellt Informationen zu Folgendem bereit:

  • Vorgehensweise zum Verbinden der Ansichten
  • Mehrere nützliche Abfragen basierend auf diesen Ansichten
  • Korrelation zwischen:
    • Spalten anzeigen
    • CREATE EVENT SESSION -Klauseln
    • Benutzeroberfläche von SSMS

Anhang: Abfragen für die Suche nach Inhabern von Berechtigungen für erweiterte Ereignisse

In diesem Artikel erwähnte Berechtigungen:

  • ALTER ANY EVENT SESSION
  • VIEW SERVER STATE
  • CONTROL SERVER

Die folgende SELECT...UNION ALL-Anweisung gibt Zeilen zurück, die angeben, wer über die erforderlichen Berechtigungen zum Erstellen von Ereignissitzungen und zum Abfragen der Systemkatalogsichten für erweiterte Ereignisse verfügt.

-- Ascertain who has the permissions listed in the ON clause.
-- 'CONTROL SERVER' permission includes all lower permissions like
-- 'ALTER ANY EVENT SESSION' and 'VIEW SERVER STATE'.
SELECT 'Owner-is-Principal' AS [Type-That-Owns-Permission],
    NULL AS [Role-Name],
    prin.name AS [Owner-Name],
    PERM.permission_name COLLATE Latin1_General_CI_AS_KS_WS AS [Permission-Name]
FROM sys.server_permissions AS PERM
INNER JOIN sys.server_principals AS prin
    ON prin.principal_id = PERM.grantee_principal_id
WHERE PERM.permission_name IN (
    'CREATE ANY EVENT SESSION',
    'ALTER ANY EVENT SESSION',
    'VIEW SERVER PERFORMANCE STATE',
    'VIEW SERVER STATE',
    'CONTROL SERVER'
)
UNION ALL
-- Plus check for members of the 'sysadmin' fixed server role,
-- because 'sysadmin' includes the 'CONTROL SERVER' permission.
SELECT 'Owner-is-Role',
    prin.name, -- [Role-Name]
    CAST((IsNull(pri2.name, N'No members')) AS NVARCHAR(128)),
    NULL
FROM sys.server_role_members AS rolm
RIGHT JOIN sys.server_principals AS prin
    ON prin.principal_id = rolm.role_principal_id
LEFT JOIN sys.server_principals AS pri2
    ON rolm.member_principal_id = pri2.principal_id
WHERE prin.name = 'sysadmin';

HAS_PERMS_BY_NAME-Funktion

Die folgende SELECT-Anweisung gibt die Berechtigungen aus. Sie beruht auf der integrierten Funktion HAS_PERMS_BY_NAME.

Wenn Sie außerdem die Berechtigung haben, vorübergehend andere Anmeldeinformationen zu imitieren , können Sie die Kommentare von EXECUTE AS und REVERT Anweisungen aufheben, um festzustellen, ob andere Anmeldungen die ALTER ANY EVENT SESSION Berechtigung besitzen.

--EXECUTE AS LOGIN = 'LoginNameHere';
SELECT HAS_PERMS_BY_NAME(NULL, NULL, 'ALTER ANY EVENT SESSION');
--REVERT;