Erweiterte Ereignispakete

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Ein Paket ist ein Container für Erweiterte Ereignisse-Objekte im SQL Server-Datenbank-Engine. Beispielsweise gibt es die folgenden Pakete in allen Datenbank-Engine, die erweiterte Ereignisse unterstützen:

  • package0 - Erweiterte Ereignissystemobjekte. Dies ist das Standardpaket.
  • sqlserver- Objekte im Zusammenhang mit der Datenbank-Engine
  • sqlos - SQL Operating System (SQLOS) verwandte Objekte.

Hinweis

Das SecAudit Paket wird intern von der Überwachungsfunktion verwendet. Keiner der Objekte in diesem Paket ist über die Data Definition Language (Extended Events Data Definition Language, DDL) verfügbar.

Pakete werden durch einen Namen, eine GUID und das binäre Modul identifiziert, in dem das Paket enthalten ist. Bei einem Modul kann es sich um eine ausführbare Datei oder eine DLL (Dynamic Link Library) handeln. Weitere Informationen finden Sie unter sys.dm_xe_packages.

Ein Paket kann beliebige oder alle der folgenden Objekte enthalten, die weiter unten in diesem Artikel ausführlicher erläutert werden:

  • Ereignisse
  • Targets
  • Aktionen
  • Typen
  • Prädikate
  • Maps

Objekte aus verschiedenen Paketen können in einer Ereignissitzung gemischt werden. Weitere Informationen finden Sie unter "Erweiterte Ereignissitzungen".

Paketinhalt

Die folgende Abbildung zeigt die Objekte, die in einem Paket vorhanden sein können.

Diagram that shows the relationship of a module, packages, and objects.

Ereignisse

Ereignisse sind Überwachungspunkte, die für den Ausführungspfad eines Programms, z. B. SQL Server, von Interesse sind. Wenn ein Ereignis ausgelöst wird, enthält es die Tatsache, dass der Interessante Punkt erreicht wurde, und Gibt Informationen zum Zeitpunkt des Auslösens des Ereignisses an.

Ereignisse können ausschließlich für Ablaufverfolgungszwecke oder auslösende Aktionen verwendet werden. Diese Aktionen können synchron oder asynchron sein.

Hinweis

Ein Ereignis verfügt nicht über Kenntnisse der Aktionen, die als Reaktion auf das Auslösen des Ereignisses ausgelöst werden können.

Eine Reihe von Ereignissen in einem Paket kann sich nicht ändern, nachdem das Paket bei erweiterten Ereignissen registriert wurde.

Alle Ereignisse verfügen über ein versionsbezogenes Schema, das ihre Inhalte definiert. Dieses Schema besteht aus Ereignisspalten mit definierten Typen. Ein Ereignis eines bestimmten Typs muss seine Daten stets in genau der Reihenfolge bereitstellen, die im Schema angegeben ist. Ein Ereignisziel muss jedoch nicht alle bereitgestellten Daten nutzen.

Ereigniskategorisierung

Extended Events verwendet ein Ereigniskategorisierungsmodell ähnlich der Ereignisablaufverfolgung für Windows (Event Tracing for Windows, ETW). Zwei Ereigniseigenschaften werden für die Kategorisierung verwendet, und zwar Kanal und Schlüsselwort. Durch die Verwendung dieser Eigenschaften wird die Integration von Extended Events in ETW und die zugehörigen Tools unterstützt.

Ein Kanal identifiziert die Zielgruppe für ein Ereignis. Kanäle werden in der folgenden Tabelle beschrieben.

Begriff Definition
Administrator Administratorereignisse sind in erster Linie auf Endbenutzer, Administratoren und Support ausgerichtet. Die Ereignisse, die im Administratorkanal gefunden werden, können auf ein Problem mit einer klar definierten Lösung hinweisen, auf die ein Administrator reagieren kann. Ein Beispiel für ein Administratorereignis ist, wenn eine Anwendung keine Verbindung herstellen kann. Diese Ereignisse werden entweder dokumentiert oder einer Nachricht zugeordnet, die dem Leser angibt, was sie tun müssen, um das Problem zu beheben.
Operative Operational-Ereignisse werden zum Analysieren und Diagnostizieren eines Problems oder eines Vorkommens verwendet. Mit ihnen können basierend auf dem Problem oder dem Vorkommen Tools oder Tasks ausgelöst werden.
Analytic Analytic-Ereignisse werden in großem Umfang veröffentlicht. Sie beschreiben Programmvorgänge und werden in der Regel in Leistungsuntersuchungen verwendet.
Debuggen Debugereignisse werden hauptsächlich von Entwicklern verwendet, um ein Problem für das Debuggen zu diagnostizieren.

Bei Ereignissen im Debug-Kanal werden interne implementierungsbezogene Statusdaten zurückgegeben. Die von den Ereignissen zurückgegebenen Schemas und Daten können in zukünftigen Versionen der Datenbank-Engine ohne Vorheriges geändert, ungültig oder entfernt werden.

Ein Schlüsselwort (keyword) ist anwendungsspezifisch und ermöglicht eine feiner abgestimmte Gruppierung verwandter Ereignisse, wodurch Sie ein Ereignis, das Sie in einer Sitzung verwenden möchten, einfacher angeben und abrufen können. Mithilfe der folgenden Abfrage können Sie Schlüsselwortinformationen abrufen.

SELECT map_value AS Keyword
FROM sys.dm_xe_map_values
WHERE name = 'keyword_map';

Targets

Ziele sind Ereignisconsumer. Ziele verarbeiten Ereignisse entweder synchron für den Thread, der das Ereignis auslöst, oder asynchron für einen vom System bereitgestellten Thread. Erweiterte Ereignisse bieten mehrere Zieltypen, die Sie für die Ausgabe von Ereignissen entsprechend verwenden können. Weitere Informationen finden Sie unter "Ziele für erweiterte Ereignisse".

Sie verwenden die ADD TARGET Klausel, um einer Ereignissitzung Ziele hinzuzufügen.

Aktionen

Eine Aktion ist eine programmgesteuerte Reaktion oder Folge von Reaktionen auf ein Ereignis. Aktionen sind an ein Ereignis gebunden, und jedes Ereignis kann über einen eigenen Satz von Aktionen verfügen.

Hinweis

Aktionen, die für bestimmte Ereignisse vorgesehen sind, können nicht an andere Ereignisse gebunden werden.

Eine an ein Ereignis gebundene Aktion wird synchron für den Thread aufgerufen, der das Ereignis ausgelöst hat. Es gibt zahlreiche Typen von Aktionen, die alle eine Vielzahl von Funktionen aufweisen. Aktionen können folgende Aufgaben ausführen:

  • Erfassen eines Prozessabbilds
  • Speichern von Statusinformationen in einem lokalen Kontext mithilfe des variablen Speichers
  • Aggregierte Ereignisdaten
  • Anfügen von Daten an Ereignisdaten

Häufige Beispiele für die Verwendung von Aktionen sind:

  • Erfassen von SQL-Text einer Abfrage, die vom Thread ausgelöst wird
  • Erfassen von Abfrageplanhandle, Abfragehash und Abfrageplanhash
  • Sammeln Sie Attribute einer Sitzung, die bewirkt, dass das Ereignis ausgelöst wird, einschließlich Clienthostname, Prinzipalname, Verbindungs-ID usw.
  • Erfassen des Aufrufstapels
  • Erfassen eines Prozessabbilds, wenn ein bestimmter Fehler auftritt

Sie verwenden die ACTION Klausel, um einer Ereignissitzung Aktionen hinzuzufügen.

Prädikate

Prädikate sind eine Gruppe logischer Regeln, mit denen Ereignisse während ihrer Verarbeitung ausgewertet werden. Dadurch kann der Extended Events-Benutzer anhand bestimmter Kriterien ausgewählte Ereignisdaten erfassen.

Prädikate können Daten in einem lokalen Kontext speichern, mit dem Prädikate erstellt werden können, die einmal alle n Minuten oder alle n Mal wahr zurückgeben, wenn ein Ereignis ausgelöst wird. Durch das Speichern in lokalem Kontext kann das Prädikat zudem dynamisch aktualisiert werden, wodurch ein zukünftiges Auslösen von Ereignissen unterdrückt werden kann, wenn die Ereignisse ähnliche Daten aufweisen.

Prädikate können Kontextinformationen wie die Thread-ID sowie ereignisspezifische Daten abrufen. Prädikate werden als vollständige boolesche Ausdrücke ausgewertet und unterstützen Kurzschlussoperationen am ersten Punkt, an dem der gesamte Ausdruck mit FALSE ausgewertet wird.

Hinweis

Prädikate mit Nebenwirkungen werden möglicherweise nicht ausgewertet, wenn eine frühere Prädikatprüfung fehlschlägt.

Sie verwenden die WHERE Klausel, um einer Ereignissitzung Prädikate hinzuzufügen.

Typen

In einem Paket verfügt jedes Extended Events-Objekt über einen Typ. Die folgenden Typen werden verwendet:

  • action
  • event
  • message
  • pred_compare
  • pred_source
  • target
  • type

Weitere Informationen finden Sie unter sys.dm_xe_objects.

Maps

In einer Zuordnungstabelle wird ein interner Wert einer Zeichenfolge zugeordnet, sodass der Benutzer erkennt, was durch den Wert dargestellt wird. Statt lediglich eines numerischen Werts erhält der Benutzer eine aussagekräftige Beschreibung des internen Werts. In der folgenden Abfrage wird dargestellt, wie Zuordnungswerte abgerufen werden.

SELECT map_key, map_value
FROM sys.dm_xe_map_values
WHERE name = 'lock_mode';

Die vorhergehende Abfrage erzeugt die folgende Ausgabe:

map_key map_value
0 NL
1 SCH_S
2 SCH_M
3 S
4 U
5 X
6 IS
7 IU
8 IX
9 SIU
10 SIX
11 UIX
12 BU
13 RS_S
14 RS_U
15 RI_NL
16 RI_S
17 RI_U
18 RI_X
19 RX_S
20 RX_U
21 LAST_MODE

Wenn Sie diese Tabelle als Beispiel verwenden, wird davon ausgegangen, dass Sie eine Spalte mit dem Namen lock_modehaben, und der Wert lautet 5. Die Tabelle gibt an, dass 5Xzuordnungen , was bedeutet, dass der Sperrtyp exklusiv ist.