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:
Paket | Beschreibung |
---|---|
package0 (Standardwert) |
Systemobjekte erweiterter Ereignisse. |
sqlserver |
Der Datenbank-Engine zugehörige Objekte. |
sqlos |
Dem SQL-Betriebssystem (SQLOS) zugehörige Objekte. |
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.
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. Durch Prädikate können Benutzer:innen erweiterter Ereignisse 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. Sie können diesen lokalen Kontextspeicher auch verwenden, um das Prädikat dynamisch zu aktualisieren, 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 und 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.