Teilen über


Pakete für erweiterte Ereignisse

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

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

  • package0 - Extended Events-Systemobjekte. Dies ist das Standardpaket.
  • sqlserver- Objekte im Zusammenhang mit der Datenbank-Engine
  • sqlos - Objekte für das SQL-Betriebssystem (SQLOS).

Hinweis

Das SecAudit Paket wird intern von der Überwachungsfunktion verwendet. Kein Objekt in diesem Paket ist über die Datendefinitionssprache (Data Definition Language, DDL) für erweiterte Ereignisse 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 eines oder alle der folgenden Objekte enthalten. Eine detailliertere Beschreibung der Objekte finden Sie weiter unten in diesem Artikel:

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

Objekte aus verschiedenen Paketen können in einer Ereignissitzung gemischt werden. Weitere Informationen finden Sie unter Sitzungen für erweiterte Ereignisse.

Paketinhalt

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

Diagramm, dass die Beziehung zwischen einem Modul, Paketen und einem Objekt zeigt.

Ereignisse

Mithilfe von Ereignissen werden relevante Punkte im Ausführungspfad eines Programms überwacht, z. B. SQL Server. Wenn ein Ereignis ausgelöst wird, bedeutet dies immer auch, dass der relevante Punkt erreicht wurde, und Informationen über den Status zu dem Zeitpunkt geliefert werden, an dem das Ereignis ausgelöst wurde.

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 hat keine Kenntnis der Aktionen, die in Reaktion auf das Auslösen des Ereignisses ausgelöst werden können.

Eine Gruppe von Ereignissen in einem Paket kann nicht geändert werden, nachdem das Paket mit Extended Events registriert wurde.

Alle Ereignisse weisen ein versionsspezifisches Schema auf, mit dem der Inhalt definiert wird. 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. Allerdings muss ein Ereignisziel nicht alle Daten verarbeiten, die bereitgestellt werden.

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älen werden in der folgenden Tabelle beschrieben.

Begriff Definition
Administrator Admin-Ereignisse sind hauptsächlich für Endbenutzer, Administratoren und Supportmitarbeiter vorgesehen. Die Ereignisse, die in den Admin-Kanälen gefunden werden, können auf ein Problem mit einer wohldefinierten Lösung hinweisen, zu dessen Behebung ein Administrator Maßnahmen ergreifen kann. Ein Beispiel für ein Admin-Ereignis ist, wenn beim Herstellen einer Verbindung ein Fehler auftritt. Diese Ereignisse sind entweder beschrieben oder weisen eine Meldung mit Hinweisen zur Behebung des Fehlers auf.
Im Betrieb 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 Debug-Ereignisse werden hauptsächlich von Entwicklern zum Diagnostizieren eines Problems verwendet, das Debuggen erforderlich macht.

Bei Ereignissen im Debug-Kanal werden interne implementierungsbezogene Statusdaten zurückgegeben. Die Schemas und Daten, die von den Ereignissen zurückgegeben werden, werden in künftigen Versionen von Datenbank-Engine möglicherweise geändert, werden ungültig oder gelöscht.

Ein Schlüsselwort ist anwendungsspezifisch und ermöglicht eine differenziertere Gruppierung ähnlicher Ereignisse. Auf diese Weise wird das Angeben und Abrufen eines Ereignisses zum Verwenden in einer Sitzung vereinfacht. 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 stellt mehrere Zieltypen zur Verfügung, mit denen Sie die Ereignisausgabe lenken können. Weitere Informationen finden Sie unter Ziele für erweiterte Ereignisse.

DieADD TARGET Klausel wird verwendet, 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 eine eigene Gruppe von Aktionen aufweisen.

Hinweis

Aktionen, die für bestimmte Ereignisse bestimmt 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 der variablen Speicherung
  • Aggregieren von Ereignisdaten
  • Anfügen von Daten an Ereignisdaten

Häufige Beispiele für Vorgänge sind etwa folgende:

  • 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.
  • Daten der Aufrufliste sammeln
  • 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 alle n Minuten oder alle n Male, dass ein Ereignis ausgelöst wird, den Wert TRUE zurückgeben. 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 Nebeneffekten können ggf. nicht ausgewertet werden, wenn bei einer vorherigen Prädikatüberprüfung ein Fehler auftritt.

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 unterstützt:

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

Weitere Informationen finden Sie unter sys.dm_xe_objects.

Karten

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

Ausgehend von dieser Tabelle wird als Beispiel eine Spalte mit dem Namen lock_mode und dem Wert 5 angenommen. Die Tabelle gibt an, dass 5 zu X zugeordnet wird. Das bedeutet, dass der Sperrentyp Exclusive ist.