Erstellen einer Sitzung für erweiterte Ereignisse mit dem Abfrage-Editor
Eine Sitzung für erweiterte Ereignisse können Sie mit dem Abfrage-Editor erstellen, können aber auch im Objekt-Explorer eine Sitzung erstellen. Im Objekt-Explorer werden für erweiterte Ereignisse zwei Benutzeroberflächen bereitgestellt, in denen Sie Ereignissitzungsdaten erstellen, ändern und anzeigen können – ein Assistent, der Sie durch die Ereignissitzungserstellung führt, und eine Benutzeroberfläche für neue Sitzungen, die erweiterte Konfigurationsoptionen bereitstellt. Sie können Sitzungen für erweiterte Ereignisse erstellen, um die SQL Server-Ablaufverfolgung zu diagnostizieren, sodass Sie z. B. folgende Aufgaben ausführen können:
Suchen der aufwendigsten Abfragen
Suchen der Ursachen von Latchkonflikten
Suchen von Abfragen, die andere Abfragen blockieren
Behandeln des Problems übermäßiger, durch Abfrageneukompilierung verursachter CPU-Auslastung
Problembehandlung für Deadlocks
Informationen zum Erstellen einer Sitzung für erweiterte Ereignisse mit dem Assistenten für neue Sitzungen finden Sie unter Erstellen einer Sitzung für erweiterte Ereignisse mithilfe des Assistenten (Objekt-Explorer). Informationen zum Erstellen einer Sitzung für erweiterte Ereignisse mit der Benutzeroberfläche für neue Sitzungen finden Sie unter Erstellen einer Sitzung für erweiterte Ereignisse im Dialogfeld für neue Sitzungen.
Berechtigungen
Zum Erstellen einer Sitzung für erweiterte Ereignisse müssen Sie über die ALTER ANY EVENT SESSION-Berechtigung verfügen.
Erstellen einer Sitzung für erweiterte Ereignisse mit dem Abfrage-Editor
So erstellen Sie eine Sitzung für erweiterte Ereignisse
In der folgenden Vorgehensweise wird gezeigt, wie eine Sitzung für erweiterte Ereignisse mit dem Abfrage-Editor in SQL Server Management Studio erstellt wird.
Bestimmen Sie, welche Ereignisse Sie in der Sitzung verwenden möchten. Um alle verfügbaren Ereignisse zusammen mit dem Schlüsselwort und dem Kanal anzuzeigen, verwenden Sie die folgende Abfrage:
Hinweis
Informationen zu Schlüsselwörtern und Kanälen finden Sie unter Pakete für erweiterte Ereignisse von SQL Server.
SELECT p.name, c.event, k.keyword, c.channel, c.description FROM ( SELECT event_package = o.package_guid, o.description, event=c.object_name, channel = v.map_value FROM sys.dm_xe_objects o LEFT JOIN sys.dm_xe_object_columns c ON o.name = c.object_name INNER JOIN sys.dm_xe_map_values v ON c.type_name = v.name AND c.column_value = cast(v.map_key AS nvarchar) WHERE object_type = 'event' AND (c.name = 'CHANNEL' or c.name IS NULL) ) c LEFT JOIN ( SELECT event_package = c.object_package_guid, event = c.object_name, keyword = v.map_value FROM sys.dm_xe_object_columns c INNER JOIN sys.dm_xe_map_values v ON c.type_name = v.name AND c.column_value = v.map_key AND c.type_package_guid = v.object_package_guid INNER JOIN sys.dm_xe_objects o ON o.name = c.object_name AND o.package_guid = c.object_package_guid WHERE object_type = 'event' AND c.name = 'KEYWORD' ) k ON k.event_package = c.event_package AND (k.event=c.event or k.event IS NULL) INNER JOIN sys.dm_xe_packages p ON p.guid = c.event_package ORDER BY keyword desc, channel, event
Fügen Sie in einem neuen Abfragefenster die folgenden Anweisungen hinzu, um eine Ereignissitzung zu erstellen, und ersetzen Sie dabei session_name durch den Sitzungsnamen, den Sie verwenden möchten:
Wichtig
In den Schritten 2 bis 6 dieser Vorgehensweise werden die einzelnen Abschnitte der Ereignissitzungsdefinition beschrieben. Sie würden alle Anweisungen vor dem Ausführen einem einzelnen Abfragefenster hinzufügen. Ein vollständiges Beispiel finden Sie in den Beispielen dieses Themas.
CREATE EVENT SESSION session_name ON SERVER
Fügen Sie die Ereignisse hinzu, die Sie überwachen möchten, im Format package_name.event_name hinzu. Fügen Sie für jedes Ereignis eine Zeile wie die folgende hinzu:
ADD EVENT package_name.event_name
Beispiele:
ADD EVENT sqlserver.file_read_completed, ADD EVENT sqlserver.file_write_completed
(Optional) Nachdem Sie ein Ereignis hinzugefügt haben, können Sie zu verwendende Aktionen hinzufügen. Sie können auch Prädikate hinzufügen. Prädikate werden verwendet, um Kriterien dafür festzulegen, wann die Ereignisinformationen vom Ziel verwendet werden sollen. Aktionen werden mit einer ACTION-Klausel hinzugefügt, Prädikate werden mit einer WHERE-Klausel hinzugefügt. Um beispielsweise eine Aktion und ein Prädikat hinzuzufügen, bei der bzw. dem der Transact-SQL-Text für das sqlserver.file_read_completed-Ereignis aufgezeichnet wird und die Datei-ID gleich 1 ist, würden Sie die folgende Anweisung einschließen:
ADD EVENT sqlserver.file_read_completed (ACTION (sqlserver.sql_text) WHERE file_id = 1),
Um anzuzeigen, welche Aktionen verfügbar sind, verwenden Sie die folgende Abfrage:
SELECT p.name AS 'package_name', xo.name AS 'action_name', xo.description, xo.object_type FROM sys.dm_xe_objects AS xo JOIN sys.dm_xe_packages AS p ON xo.package_guid = p.guid WHERE xo.object_type = 'action' AND (xo.capabilities & 1 = 0 OR xo.capabilities IS NULL) ORDER BY p.name, xo.name
Um anzuzeigen, welche Prädikate für ein Ereignis verfügbar sind, verwenden Sie die folgende Abfrage, und ersetzen Sie dabei event_name durch den Namen des Ereignisses, dem Sie ein Prädikat hinzufügen möchten:
SELECT * FROM sys.dm_xe_object_columns WHERE object_name = 'event_name' AND column_type = 'data'
Beispiel:
SELECT * FROM sys.dm_xe_object_columns WHERE object_name = 'file_read_completed' AND column_type = 'data'
Beachten Sie, dass Sie auch globale Prädikatquellen hinzufügen können. Eine globale Prädikatquelle kann in einen beliebigen Prädikatausdruck verwendet werden. Um anzuzeigen, welche globalen Prädikatquellen verfügbar sind, verwenden Sie die folgende Abfrage:
SELECT p.name AS package_name, xo.name AS predicate_name , xo.description, xo.object_type FROM sys.dm_xe_objects AS xo JOIN sys.dm_xe_packages AS p ON xo.package_guid = p.guid WHERE xo.object_type = 'pred_source' ORDER BY p.name, xo.name
Sie könnten z. B. den folgenden Prädikatausdruck verwenden, um anzugeben, dass Daten für ein Ereignis nur die ersten fünf Male, die ein Ereignis auftritt, erfasst werden sollen.
WHERE package0.counter <= 5
Fügen Sie das gewünschte Ziel hinzu, an dem die Ereignisdaten verarbeitet und verwendet werden. Verwenden Sie folgendes Format:
ADD TARGET package_name.target_name
Im folgenden Beispiel wird das asynchrone Dateiziel hinzugefügt:
ADD TARGET package0.asynchronous_file_target (SET filename = 'c:\temp\xelog.xel', metadatafile = 'c:\temp\xelog.xem')
Um die Liste der verfügbaren Ziele anzuzeigen, verwenden Sie die folgende Abfrage:
SELECT p.name AS 'package_name', xo.name AS 'target_name' , xo.description, xo.object_type FROM sys.dm_xe_objects AS xo JOIN sys.dm_xe_packages AS p ON xo.package_guid = p.guid WHERE xo.object_type = 'target' AND (xo.capabilities & 1 = 0 OR xo.capabilities IS NULL) ORDER BY p.name, xo.name
Hinweis
Informationen zu den unterschiedlichen Zieltypen finden Sie unter Ziele für erweiterte Ereignisse von SQL Server.
Überprüfen Sie alle zusätzlichen Konfigurationsoptionen, und fügen Sie sie hinzu. Sie können Optionen konfigurieren, beispielsweise den Ereignisbeibehaltungsmodus, wie lange Ereignisse im Arbeitsspeicher gepuffert werden, oder ob die Ereignissitzung automatisch gestartet werden soll, wenn SQL Server gestartet wird. Die Optionen werden im Thema ALTER EVENT SESSION (Transact-SQL) beschrieben. Beachten Sie, dass Standardwerte zugewiesen werden, wenn diese Optionen nicht angegeben werden.
Starten Sie die Sitzung.
Hinweis
Weitere Informationen zum Anzeigen der Sitzungsergebnisse finden Sie im entsprechenden Thema für den verwendeten Zieltyp im Knoten Ziele für erweiterte Ereignisse von SQL Server der Onlinedokumentation.
Im folgenden Beispiel wird eine Sitzung für erweiterte Ereignisse mit dem Namen "IOActivity" erstellt, die die folgenden Informationen aufzeichnet:
Ereignisdaten für abgeschlossene Dateilesevorgänge, einschließlich des zugewiesenen Transact-SQL-Texts für Dateilesevorgänge, bei denen die Datei-ID gleich 1 ist.
Ereignisdaten für abgeschlossene Dateischreibvorgänge.
Ereignisdaten für Situationen, in denen Daten aus dem Protokollcache in die physische Protokolldatei geschrieben werden.
Die Sitzung sendet die Ausgabe an ein Dateiziel.
CREATE EVENT SESSION IOActivity
ON SERVER
ADD EVENT sqlserver.file_read_completed
(
ACTION (sqlserver.sql_text)
WHERE file_id = 1),
ADD EVENT sqlserver.file_write_completed,
ADD EVENT sqlserver.databases_log_flush
ADD TARGET package0.asynchronous_file_target
(SET filename = 'c:\temp\xelog.xel', metadatafile = 'c:\temp\xelog.xem')
Siehe auch
Verweis
CREATE EVENT SESSION (Transact-SQL)