1. Einleitung
1.1 Was sind SQL Server Erweiterte Veranstaltungen?
SQL Server Extended Events ist ein schlankes Leistungsüberwachungssystem, das Administratoren und Entwicklern die Erfassung und Analyse detaillierter Serveraktivitätsdaten ermöglicht. Dieses System ist in die SQL Server Die Datenbank-Engine bietet umfassende Einblicke sowohl in den Normalbetrieb als auch in Szenarien zur Fehlerbehebung.
1.2 Warum sollte man erweiterte Ereignisse für die Überwachung verwenden?
SQL Server Erweiterte Ereignisse bieten mehrere überzeugende Vorteile für die Datenbanküberwachung und Fehlerbehebung:
- Minimale Leistungseinbußen dank leichter Architektur
- Granulare Kontrolle über Datenerfassung und Ereignisfilterung
- Anpassbare Datenerfassung, zugeschnitten auf spezifische Überwachungsanforderungen
- Fähigkeit, Ereignisse aus mehreren Paketen gleichzeitig zu erfassen
- Flexible Filterfunktionen zur Fokussierung auf relevante Vorgänge
- Unterstützung für die Überwachung von Produktionssystemen ohne Beeinträchtigung der Benutzerfreundlichkeit
- Umfassende Leistungskennzahlenverfolgung
- Erweiterte Diagnosefunktionen zur Fehlerbehebung
- Audit-Trail-Pflege zur Einhaltung der Compliance-Anforderungen
- Optionen zur Echtzeit- und historischen Datenanalyse
1.3 Erweiterte Ereignisse vs SQL Server Profiler
Während SQL Server Profiler MS SQL Extended Events war bisher ein traditionelles Überwachungstool und bietet eine effizientere Alternative. Extended Events benötigt weniger Systemressourcen und bietet eine bessere Skalierbarkeit für Produktionsumgebungen.
SQL Server Profiler ist veraltet, und Microsoft empfiehlt, für alle Überwachungsaktivitäten auf Extended Events umzusteigen.
2. Erweiterte Ereignisarchitektur verstehen
2.1 Komponenten der erweiterten Ereignis-Engine
Die Extended Events-Engine besteht aus mehreren Kernkomponenten, die zusammenarbeiten, um Ereignisdaten zu erfassen, zu verarbeiten und zu speichern. Das Verständnis dieser Komponenten hilft Ihnen bei der Entwicklung effektiver Überwachungslösungen.
- Dispatcher: Die Dispatcher-Komponente koordiniert den Ereignisfluss von den Ereignisquellen zur Extended Events-Engine. Wenn ein Ereignis ausgelöst wird, empfängt der Dispatcher die Benachrichtigung und leitet sie an aktive Sitzungen weiter, die diesen spezifischen Ereignistyp abonniert haben.
- Buffer: Puffer speichern Ereignisdaten temporär im Speicher, bevor sie auf die Zielsysteme geschrieben werden. Dieser Puffermechanismus verbessert die Leistung durch die Reduzierung von E/A-Operationen. Puffergröße und Verwaltungseinstellungen können so konfiguriert werden, dass ein optimales Verhältnis zwischen Speichernutzung und Datenerfassungsanforderungen erreicht wird.
- Session: Eine Sitzung definiert den Umfang der Ereignisüberwachung. Sie legt fest, welche Ereignisse erfasst, welche Aktionen ausgeführt, welche Prädikate angewendet und wo die Ergebnisse gespeichert werden. Sitzungen können unabhängig voneinander erstellt, geändert, gestartet und beendet werden.
- Zielinstanz: Zielinstanzen stellen die Speicherorte für erfasste Ereignisdaten dar. Jede Sitzung kann in ein oder mehrere Ziele schreiben, beispielsweise in Dateien, Ringpuffer oder Zähler. Die Ziele verarbeiten und speichern die Ereignisinformationen zur späteren Analyse.
2.2 Veranstaltungspakete
SQL Server Extended Events organisiert Funktionalität in Paketen. Jedes Paket enthält zusammengehörige Ereignisse, Aktionen, Typen, Prädikate und Ziele. Gängige Pakete sind beispielsweise sqlserver, sqlos und package0.
- Das sqserver-Paket stellt datenbankspezifische Ereignisse wie Abfragen und Transaktionen bereit.
- Das Paket sqlos enthält Betriebssystemereignisse.
- Das Paket 0 bietet allgemeine Funktionalitäten, die in allen Paketen verwendet werden.
2.3 Ereignistypen und Felder
Ereignisse stellen Vorkommnisse innerhalb von SQL Server Die Sie überwachen möchten. Jeder Ereignistyp verfügt über vordefinierte Felder, die relevante Informationen erfassen. Beispielsweise enthält das Ereignis „sql_statement_completed“ Felder für Dauer, CPU-Zeit, Lese- und Schreibvorgänge.
Ereignisse können synchron oder asynchron sein. Synchrone Ereignisse werden während des Vorgangs ausgelöst, asynchrone hingegen nach dessen Abschluss. Das Verständnis der Ereigniseigenschaften hilft Ihnen, die passenden Ereignisse für Ihre Überwachungsanforderungen auszuwählen.
2.4 Aktionen
Aktionen fügen erfassten Ereignissen zusätzliche Informationen hinzu. Wenn ein Ereignis ausgelöst wird, werden zugehörige Aktionen ausgeführt, um zusätzlichen Kontext wie SQL-Text, Sitzungs-ID oder Aufrufstapelinformationen zu erfassen.
Gängige Aktionen umfassen sql_text zum Erfassen von Abfrageanweisungen, database_name zur Identifizierung der Datenbank und client_hostname zur Nachverfolgung des Ursprungsservers. Aktionen liefern wichtige Kontextinformationen für die Fehlerbehebung und Analyse.
2.5-Ziele
Ziele legen fest, wie und wo Ereignisdaten gespeichert werden. SQL Server Erweiterte Ereignisse unterstützen mehrere Zieltypen, darunter:
- Die Ereignisdatei dient der Speicherung auf der Festplatte und bietet dauerhaften Speicherplatz für detaillierte Analysen.
- Ringpuffer für speicherbasierte Aufbewahrung, der schnellen Zugriff auf aktuelle Ereignisse bei minimalem Overhead ermöglicht.
- Ereigniszähler für einfaches Zählen
- Histogramm zur Gruppierung
- Paarvergleich zum Korrelieren verwandter Ereignisse
2.6 Prädikate (Filter)
Prädikate filtern Ereignisse anhand festgelegter Bedingungen und reduzieren so die Menge der erfassten Daten. Sie können nach Datenbankname, Anwendungsname, Sitzungs-ID, Dauerschwellenwerten oder beliebigen Ereignisfeldwerten filtern.
Die effektive Verwendung von Prädikaten minimiert die Leistungseinbußen, indem nur relevante Ereignisse erfasst werden. Komplexe Prädikate kombinieren mehrere Bedingungen mithilfe logischer Operatoren, um präzise Filterkriterien zu erstellen.
3. Erweiterte Ereignissitzungszustände und Lebenszyklus
3.1 Sitzungszustände: ERSTELLEN, ÄNDERN und LÖSCHEN
Erweiterte Veranstaltungssitzungen durchlaufen verschiedene Phasen:
- Die Anweisung CREATE EVENT SESSION definiert eine neue Sitzung, startet sie aber nicht. Die Sitzung befindet sich im angehaltenen Zustand, bis sie explizit aktiviert wird.
- Mit der Anweisung ALTER EVENT SESSION wird die Sitzungskonfiguration geändert oder deren Status zwischen gestoppt und gestartet angepasst.
- Die DROP EVENT SESSION-Anweisung entfernt die Sitzungsdefinition vollständig vom Server.
3.2 Sitzungsinhalte und -merkmale
Jede Sitzung umfasst eine Sammlung von Ereignissen, Aktionen, Zielen und Prädikaten. Sitzungen haben implizite Grenzen, die ihren Umfang und ihr Verhalten definieren. Konfigurationsoptionen steuern die Speicherverwaltung, die Ereignisspeicherung und die Latenzzeit der Ereignisverarbeitung.
Zu den Sitzungseigenschaften gehören die Beibehaltung der Sitzungseigenschaften nach Serverneustarts, die maximale Speicherzuweisung und der Umgang mit Speicherengpässen. Diese Einstellungen haben einen erheblichen Einfluss auf das Sitzungsverhalten und den Ressourcenverbrauch.
3.3 Sitzungsgrenzen und Pakete
Sitzungsgrenzen definieren Beziehungen zwischen Ereignissen, Zielen und Paketen. Ereignisse aus einem Paket können Aktionen aus einem anderen Paket auslösen und bieten so Flexibilität bei den Datenerfassungsstrategien.
Paketbeziehungen ermöglichen es Ihnen, Ereignisse aus mehreren Quellen innerhalb einer einzigen Sitzung zu kombinieren. Diese Funktion ermöglicht umfassende Überwachungsszenarien, die sich über verschiedene Bereiche erstrecken. SQL Server Subsysteme.
4. Erstellen erweiterter Ereignissitzungen mit SSMS
4.1 Voraussetzungen und Einrichtung
Vor dem Erstellen SQL Server Für Sitzungen mit erweiterten Ereignissen stellen Sie sicher, dass Sie über die entsprechenden Berechtigungen verfügen. Sie benötigen die Berechtigung ALTER ANY EVENT SESSION für serverseitige Sitzungen oder die Berechtigung CONTROL für die Datenbank für datenbankseitige Sitzungen.
Überprüfen Sie, dass SQL Server Management Studio ist installiert und mit Ihrer Zielinstanz verbunden. Machen Sie sich mit den Überwachungsanforderungen vertraut und ermitteln Sie, welche Ereignisse und Ziele Ihren Bedürfnissen am besten entsprechen.
4.2 Zugriff auf erweiterte Ereignisse im Objekt-Explorer
Um auf die Schnittstelle „Erweiterte Ereignisse“ in SSMS zuzugreifen, gehen Sie wie folgt vor:
- Öffne SQL Server Management Studio und verbinden Sie sich mit Ihrem SQL Server Beispiel.
- Im Objekt-Explorer erweitern Verwaltung -> Erweiterte Ereignisse.
- Der Knoten „Erweiterte Ereignisse“ enthält Fachsitzungen und Pakete Ordner zur Verwaltung Ihrer Überwachungskonfigurationen.
4.3 Eine neue Sitzung erstellen
So erstellen Sie eine neue Sitzung:
-
- Klicken Sie mit der rechten Maustaste auf Fachsitzungen Ordner unter Erweiterte Ereignisse.
- Wählen Sie Neue Sitzung Um den Konfigurationsdialog zu öffnen. Im Folgenden wird diese Methode verwendet, um eine neue Sitzung zu erstellen.
Beachten Sie das Assistent für neue Sitzungen Für ein intensiveres Erlebnis steht Ihnen auch eine geführte Tour zur Verfügung.
4.3.1 Allgemeine Seitenkonfiguration
Auf dem Allgemein Seite, grundlegende Sitzungseigenschaften konfigurieren:
- Geben Sie einen Sitzungsnamen ein im Sitzungsname Feld. Verwenden Sie beschreibende Namen, die den Überwachungszweck angeben.
- Optionale Auswahl Die Ereignissitzung wird beim Serverstart gestartet. um die automatische Sitzungsaktivierung zu ermöglichen.
- Die Standard-Sitzungsvorlage ist LeerSie können auch andere Vorlagen verwenden, wenn Sie eine vordefinierte Konfiguration nutzen.
4.3.2 Einrichtung der Veranstaltungsseite
Das VERANSTALTUNGEN Auf dieser Seite können Sie auswählen, welche Ereignisse überwacht werden sollen:
- Wähle aus VERANSTALTUNGEN Seite von links Wählen Sie eine Seite aus Panel.
- Bei VeranstaltungsbibliothekDurchsuchen Sie die verfügbaren Veranstaltungen oder nutzen Sie die Suchfunktion.
- Filtern Sie Ereignisse, indem Sie Schlüsselwörter wie „sql_statement_completed“ eingeben, um relevante Ereignisse zu finden.
- Wählen Sie das gewünschte Ereignis aus, z. B. sql_statement_completed.
- Klicken Sie auf den Pfeil nach rechts, um das Ereignis zu verschieben. Ausgewählte Veranstaltungen Liste.
4.3.3 Datenspeicherkonfiguration
Das Datenspeicher Auf dieser Seite wird definiert, wo Ereignisdaten gespeichert werden:
- Wähle aus Datenspeicher Seite von links Wählen Sie eine Seite aus Panel.
- Bei Targets Bereich, wählen Sie einen Zieltyp aus dem Dropdown-Menü.
(1) Ziel der Ereignisdatei
Das Ziel event_file speichert Daten in Festplattendateien mit der Erweiterung .xel:
- Wählen Sie Ereignisdatei aus dem Dropdown-Menü „Zieltyp“.
- Geben Sie den Dateipfad an, z. B. C:\temp\YourSession_Target.xel.
- Konfigurieren Sie die Rollover-Optionen, um den Speicherplatz durch Festlegen der maximalen Dateigröße und Dateianzahl zu verwalten.
- Das Zielsystem schreibt kontinuierlich Ereignisse, bis die Sitzung beendet wird oder die Speichergrenzen erreicht sind.
(2) Ringpuffer-Ziel
Das Ziel „ring_buffer“ speichert Ereignisse im Speicher, um einen schnellen Zugriff ohne Festplatten-E/A zu ermöglichen:
- Wählen Sie Ringpuffer als Zieltyp.
- Konfigurieren Sie die maximale Speicherzuweisung für den Puffer.
- Beachten Sie, dass ältere Ereignisse verworfen werden, sobald der Puffer voll ist. Daher eignet sich diese Methode zur Überwachung aktueller Aktivitäten.
(3) Ereigniszähler Ziel
Das Ziel „event_counter“ zählt lediglich das Auftreten von Ereignissen, ohne detaillierte Daten zu speichern. Dies minimiert den Overhead, wenn Sie nur Häufigkeitsinformationen benötigen.
(4) Histogramm Ziel
Das Histogramm gruppiert Ereignisse anhand eines festgelegten Feldwertes und erstellt Verteilungsstatistiken. Dies ist nützlich, um häufig auftretende Muster oder besonders häufige Werte zu identifizieren.
(5) Paarübereinstimmung Ziel
Das Ziel „paarweise Zuordnung“ korreliert zusammengehörige Ereignisse wie das Erlangen und Freigeben von Sperren. Dies ermöglicht die Analyse gepaarter Operationen und ihrer zeitlichen Beziehungen.
4.3.4 Erweiterte Einstellungen
Das Erweitert Die Seite bietet Konfigurationsoptionen auf Sitzungsebene:
- Wähle aus Erweitert Seite von links Wählen Sie eine Seite aus Panel.
- Einrichtung Ereignisaufbewahrungsmodus um zu steuern, wie Ereignisse unter Speicherdruck verarbeitet werden.
- Stelle den Maximale Dispatch-Latenz um Echtzeitverarbeitung und Systemleistung in Einklang zu bringen.
- Einrichtung Maximale Speichergröße und Maximale Ereignisgröße basierend auf Ihren Überwachungsanforderungen.
- Wählen Sie Speicherpartitionsmodus zur Optimierung für Umgebungen mit einem oder mehreren CPUs.
4.4 Konfigurieren von Ereignisfiltern (Prädikaten)
Prädikate reduzieren das Datenvolumen, indem sie Ereignisse anhand spezifischer Kriterien filtern. So konfigurieren Sie Filter:
- Auf dem VERANSTALTUNGEN Wählen Sie auf der Seite das Ereignis aus, nach dem Sie filtern möchten, z. B. „sql_statement_completed“.
- Gehen Sie auf Einrichtung um den Dialog zur Ereigniskonfiguration zu öffnen.
- Wähle aus Filter (Prädikat) Tab.
- Bei Feld Wählen Sie im Dropdown-Menü das Feld aus, nach dem gefiltert werden soll, z. B. die Dauer.
- Wählen Sie eine aus Operatorwie zum Beispiel „>“.
- Geben Sie den Filter ein Wertzum Beispiel 1000000 (1 Sekunde).
- Fügen Sie bei Bedarf weitere Bedingungen hinzu.
4.5 Auswählen von Aktionen und Ereignisfeldern
Für jedes Ereignis können Sie die zu erfassenden Daten auswählen:
- Auf dem VERANSTALTUNGEN Wählen Sie auf der Seite das Ereignis aus, für das Sie die Daten auswählen möchten, z. B. „sql_statement_completed“.
- Gehen Sie auf Einrichtung um den Dialog zur Ereigniskonfiguration zu öffnen.
- Wähle aus Globale Felder (Aktionen) Tab.
- Wählen Sie Aktionen aus, um zusätzliche Informationen wie Datenbankname oder Client-App-Name hinzuzufügen.
- Überprüfen Sie die Ereignisfelder In diesem Abschnitt können Sie sehen, welche Felder automatisch erfasst werden.
- Löschen Sie alle unnötigen Felder, um das Datenvolumen zu reduzieren.
4.6 Sitzungen starten und verwalten
Nachdem Sie Ihre Sitzung konfiguriert haben, können Sie sie starten und ihren Betrieb überwachen:
- Gehen Sie auf OK um die Sitzung zu erstellen.
- Erweitern Sie im Objekt-Explorer die Fachsitzungen Ordner, um Ihre neue Sitzung anzuzeigen.
- Klicken Sie mit der rechten Maustaste auf den Sitzungsnamen und wählen Sie aus Sitzung starten um mit der Ereigniserfassung zu beginnen.
- Um Live-Daten anzuzeigen, klicken Sie mit der rechten Maustaste auf die Sitzung und wählen Sie aus Live-Daten ansehen.
- Die Sitzung durch Rechtsklicken und Auswählen beenden Sitzung beenden.
5. Erstellen erweiterter Ereignissitzungen mithilfe von T-SQL
5.1 Syntax für CREATE EVENT SESSION
Die Erstellung erweiterter Ereignissitzungen mit T-SQL ermöglicht eine präzise Steuerung und die Skripterstellung für die automatisierte Bereitstellung. Die Anweisung CREATE EVENT SESSION folgt einer spezifischen Syntaxstruktur.
Die grundlegende Syntax umfasst den Sitzungsnamen, ADD EVENT-Klauseln für jedes Ereignis, ADD TARGET-Klauseln für Speicherziele und optionale WITH-Klauseln zur Sitzungskonfiguration.
5.2 Erstellen einer grundlegenden Ereignissitzung
Eine einfache Sitzung überwacht bestimmte Ereignisse und schreibt die Ergebnisse in ein Ziel. So erstellen Sie die wesentlichen Komponenten.
5.2.1 Sitzungsnamen und Optionen definieren
Erstellen Sie zunächst die Sitzung mit einem aussagekräftigen Namen:
CREATE EVENT SESSION [SampleSession] ON SERVER
Die ON SERVER-Klausel erstellt eine serverweite Sitzung, die auch nach Datenbankänderungen erhalten bleibt. Verwenden Sie für Azure SQL-Datenbanken ON DATABASE für datenbankweite Sitzungen.
5.2.2 Ereignisse mit ADD EVENT hinzufügen
Fügen Sie Ereignisse zur Erfassung mithilfe der ADD EVENT-Klausel hinzu:
CREATE EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_statement_completed
Dies erfasst alle abgeschlossenen SQL-Anweisungen. Sie können mehrere Ereignisse hinzufügen, indem Sie zusätzliche ADD EVENT-Klauseln einfügen.
5.2.3 Konfigurieren von Ereignisaktionen
Aktionen sammeln zusätzlichen Kontext für jedes Ereignis. Fügen Sie Aktionen in Klammern hinter dem Ereignisnamen hinzu:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)
Dieses Beispiel erfasst den SQL-Text, den Datenbanknamen und den Benutzernamen für jede abgeschlossene Anweisung.
5.2.4 Festlegen von Ereignisprädikaten (WHERE-Klausel)
Prädikate filtern Ereignisse, um das Datenvolumen zu reduzieren. Verwenden Sie die WHERE-Klausel innerhalb der Ereignisdefinition:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text)
WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)
Dieser Filter entfernt Anweisungen mit einer Dauer von mehr als 5 Sekunden (5,000,000 Mikrosekunden).
5.3 Hinzufügen von Ereigniszielen
Ziele definieren, wo Ereignisdaten gespeichert und wie sie verarbeitet werden.
5.3.1 Syntax für ZIEL HINZUFÜGEN
Fügen Sie Ziele mithilfe der ADD TARGET-Klausel hinzu, nachdem alle Ereignisse definiert wurden:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
Das Präfix package0 zeigt an, dass das Ziel aus dem Basispaket stammt.
5.3.2 Konfigurieren der Zielparameter
Jeder Zieltyp akzeptiert spezifische Parameter. Konfigurieren Sie für event_file die Parameter filename, max_file_size und max_rollover_files:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel',
max_file_size=(50),
max_rollover_files=(5)
)
Diese Konfiguration erstellt Dateien mit einer Größe von jeweils bis zu 50 MB und behält bis zu 5 Dateien beim Rollover bei.
5.4 Sitzungsoptionen und -einstellungen
Die WITH-Klausel konfiguriert Optionen auf Sitzungsebene, die das Verhalten und die Ressourcennutzung steuern.
5.4.1 MAX_MEMORY und EVENT_RETENTION_MODE
Speicherverwaltung und Ereignisbehandlung unter Last steuern:
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)
Zu den Optionen von EVENT_RETENTION_MODE gehören ALLOW_SINGLE_EVENT_LOSS für minimalen Speicherverbrauch, ALLOW_MULTIPLE_EVENT_LOSS für moderaten Mehraufwand und NO_EVENT_LOSS für vollständige Datenerhaltung, allerdings mit potenziellen Auswirkungen auf die Leistung.
5.4.2 MAX_DISPATCH_LATENCY
Legen Sie die maximale Zeit fest, die Ereignisse in Puffern verbleiben dürfen, bevor sie in Ziele geschrieben werden:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
Niedrigere Werte liefern mehr Echtzeitdaten, erfordern jedoch einen erhöhten Aufwand an E/A-Operationen.
5.4.3 MEMORY_PARTITION_MODE
Optimieren Sie die Speicherpartitionierung für Ihre Hardwarekonfiguration:
WITH (
MEMORY_PARTITION_MODE=PER_CPU
)
Zu den Optionen gehören NONE für eine einzelne Partition, PER_NODE für NUMA-Systeme und PER_CPU für maximale Parallelität auf Mehrkernprozessorsystemen.
5.5 Sitzungen starten, beenden und ändern
Sitzungsstatus und -konfiguration werden über ALTER EVENT SESSION-Anweisungen verwaltet.
5.5.1 Ereignissitzung für Start/Stopp ändern
Nach der Erstellung eine Sitzung starten:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;
Eine laufende Sitzung beenden:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;
5.5.2 Ändern bestehender Sitzungen
Sitzungskonfiguration im gestoppten Zustand ändern. Ereignisse hinzufügen:
ALTER EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_batch_completed;
Ereignisse entfernen:
ALTER EVENT SESSION [SampleSession] ON SERVER DROP EVENT sqlserver.sql_statement_completed;
5.5.3 Abbruch von Veranstaltungssitzungen
Eine Sitzung vollständig entfernen mit DROP EVENT SESSION:
DROP EVENT SESSION [SampleSession] ON SERVER;
Die Sitzung muss vor dem Abbruch beendet werden.
6. Detaillierte Bearbeitung von Ereigniszielen
6.1 Ereignisdatei-Zielkonfiguration
Das Ziel „event_file“ bietet persistenten Speicher für Ereignisdaten mit flexiblen Konfigurationsoptionen.
6.1.1 Dateipfad und Namenskonventionen
Geben Sie den vollständigen Pfad und Dateinamen für Ereignisdateien an:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel'
)
Verwenden Sie die Dateiendung .xel für erweiterte Ereignisprotokolldateien. Stellen Sie sicher, dass SQL Server Das Dienstkonto besitzt Schreibberechtigungen für das angegebene Verzeichnis.
6.1.2 Dateirotation und Größenverwaltung
Konfigurieren Sie die automatische Dateirotation zur Verwaltung des Speicherplatzes:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel',
max_file_size=(50),
max_rollover_files=(10)
)
Wenn eine Datei 50 MB erreicht, SQL Server Extended Events erstellt eine neue Datei mit einer fortlaufenden Endung. Nach Erreichen von 10 Dateien wird die älteste Datei überschrieben.
6.1.3 Lesen von Ereignisdateidaten
Abfrage von Ereignisdateidaten mithilfe der Funktion sys.fn_xe_file_target_read_file:
SELECT
event_data,
file_name,
file_offset
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
Das Wildcard-Muster liest alle Dateien, die mit der Sitzung verknüpft sind.
6.2 Ringpuffer-Zielverwendung
Das Ziel „ring_buffer“ speichert Ereignisse im Speicher, um einen schnellen Zugriff auf die letzten Aktivitäten zu ermöglichen.
6.2.1 Speicherbasierte Ereignisspeicherung
Konfigurieren Sie den Ringpuffer für speicherbasierte Speicherung:
ADD TARGET package0.ring_buffer
Die Veranstaltungen bleiben nur während der aktiven Sitzung zugänglich und SQL Server Die Sitzung läuft. Daten gehen verloren, wenn die Sitzung beendet oder der Server neu gestartet wird.
6.2.2 Puffergröße und Konfiguration
Speicherzuweisung für den Ringpuffer steuern:
ADD TARGET package0.ring_buffer(
SET max_memory=(4096)
)
Geben Sie den Speicherplatz in KB an. Wenn der Puffer voll ist, werden ältere Ereignisse nach dem FIFO-Prinzip verworfen.
6.2.3 Abfragen von Ringpufferdaten
Zugriff auf Ringpufferdaten über DMVs:
SELECT
CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
AND t.target_name = 'ring_buffer';
Die target_data enthält Ereignisinformationen im XML-Format.
6.3 Ereigniszähler Ziel
Das Ziel event_counter ermöglicht einfaches Zählen ohne detaillierte Datenspeicherung:
ADD TARGET package0.event_counter
Dieses Ziel verfolgt die Ereignishäufigkeit mit minimalem Aufwand und ist nützlich für die Überwachung großer Datenmengen, bei der nur die Anzahl zählt.
6.4 Histogramm Ziel
Das Histogramm gruppiert Ereignisse nach Feldwerten:
ADD TARGET package0.histogram(
SET filtering_event_name=N'sqlserver.sql_statement_completed',
source_type=0,
source=N'database_name'
)
Diese Konfiguration erzeugt ein Histogramm, das die Verteilung der Ereignisse über die Datenbanken hinweg anzeigt.
6.5 Paarvergleich Ziel
Das Ziel „pair_matching“ korreliert zusammengehörige Ereignisse wie beispielsweise Sperrerwerbe mit Sperrfreigaben:
ADD TARGET package0.pair_matching(
SET begin_event=N'sqlserver.lock_acquired',
end_event=N'sqlserver.lock_released',
begin_matching_columns=N'resource_type',
end_matching_columns=N'resource_type'
)
Dies ermöglicht die Analyse von gepaarten Operationen und deren Dauer.
7. Anzeigen und Analysieren erweiterter Ereignisdaten
7.1 Verwenden von SSMS zum Anzeigen von Live-Daten
SQL Server Management Studio bietet eine grafische Benutzeroberfläche zur Echtzeit-Anzeige von erweiterten Ereignisdaten:
- Im Objekt-Explorer erweitern Verwaltung -> Erweiterte Ereignisse -> Fachsitzungen.
- Klicken Sie mit der rechten Maustaste auf Ihre aktive Sitzung.
- Wählen Sie Live-Daten ansehen Um den Live-Daten-Viewer zu öffnen.
- Die Ereignisse werden im Raster angezeigt, sobald sie eintreten.
- Klicken Sie auf einzelne Ereignisse, um detaillierte Feldwerte im Detailbereich anzuzeigen.
- Verwenden Sie die Filter in der Symbolleiste, um sich auf bestimmte Ereignistypen oder Feldwerte zu konzentrieren.
7.2 Abfragen von Ereignisdateidaten mit T-SQL
T-SQL-Abfragen ermöglichen eine flexible Analyse der erfassten Ereignisdaten.
7.2.1 sys.fn_xe_file_target_read_file Funktion
Lesen Sie Ereignisdateidaten mithilfe dieser Systemfunktion:
SELECT
object_name AS EventName,
CAST(event_data AS XML) AS EventData,
file_name,
file_offset,
timestamp_utc
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
Die Funktion gibt pro Ereignis eine Zeile mit XML-formatierten Details zurück.
7.2.2 Parsen von XML-Ereignisdaten
Extrahieren spezifischer Werte aus den XML-Ereignisdaten:
SELECT
event_data.value('(event/@name)[1]', 'VARCHAR(50)') AS EventName,
event_data.value('(event/@timestamp)[1]', 'DATETIME2') AS Timestamp,
event_data.value('(event/data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
event_data.value('(event/data[@name="statement"]/value)[1]', 'VARCHAR(MAX)') AS Statement
FROM (
SELECT CAST(event_data AS XML) AS event_data
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
) AS EventData;
XQuery-Ausdrücke extrahieren einzelne Feldwerte aus der XML-Struktur.
7.2.3 Konvertierung von Ereignisdaten in Tabellen
Erstellen strukturierter Ergebnismengen aus Ereignisdaten:
WITH EventData AS (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
)
SELECT
EventXML.value('(event/@name)[1]', 'VARCHAR(100)') AS EventName,
EventXML.value('(event/data[@name="cpu_time"]/value)[1]', 'BIGINT') AS CPUTime,
EventXML.value('(event/data[@name="physical_reads"]/value)[1]', 'BIGINT') AS PhysicalReads,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM EventData;
7.3 Abfragen von Ringpufferdaten
Daten aus ring_buffer-Zielen extrahieren:
SELECT
n.value('(@name)[1]', 'VARCHAR(50)') AS EventName,
n.value('(@timestamp)[1]', 'DATETIME2') AS Timestamp,
n.value('(data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
n.value('(action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
AND t.target_name = 'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('//event') AS q(n);
7.4 Systemansichten für erweiterte Ereignisse
SQL Server bietet mehrere DMVs und Katalogansichten zur Verwaltung und Überwachung von Extended Event-Sitzungen.
7.4.1 sys.server_event_sessions
Auf dem Server gespeicherte Sitzungsdefinitionen anzeigen:
SELECT
name,
event_retention_mode_desc,
max_dispatch_latency,
max_memory,
max_event_size,
memory_partition_mode_desc
FROM sys.server_event_sessions;
Diese Katalogansicht zeigt Konfigurationsdetails für alle definierten Sitzungen.
7.4.2 sys.dm_xe_sessions
Aktuell aktive Sitzungen anzeigen:
SELECT
name,
create_time,
total_regular_buffers,
regular_buffer_size,
total_large_buffers,
large_buffer_size
FROM sys.dm_xe_sessions;
Dieses DMV liefert Laufzeitinformationen über aktive Extended Event-Sitzungen.
7.4.3 sys.dm_xe_session_targets
Ziele anzeigen, die mit aktiven Sitzungen verknüpft sind:
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
t.execution_duration_ms
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
7.4.4 Andere nützliche Kfz-Zulassungsstellen
Zusätzliche Ansichten liefern umfassende Sitzungsinformationen:
- sys.dm_xe_session_events: Listet Ereignisse in aktiven Sitzungen auf
- sys.dm_xe_session_event_actions: Zeigt die für Sitzungsereignisse konfigurierten Aktionen an
- sys.dm_xe_objects: Katalogisiert alle verfügbaren Ereignisse, Aktionen und Ziele
- sys.dm_xe_object_columns: Verfügbare Detailfelder für jeden Ereignistyp
- sys.dm_xe_packages: Listet alle erweiterten Ereignispakete auf
8. Praktische Anwendungsfälle und Beispiele
8.1 Überwachung der Ausführung von SQL-Anweisungen
Die Verfolgung der Ausführung von SQL-Anweisungen liefert Einblicke in Abfragemuster und Leistungsmerkmale.
8.1.1 Protokollierung von sql_statement_completed-Ereignissen
Erstellen Sie eine Sitzung zur Überwachung abgeschlossener SQL-Anweisungen:
CREATE EVENT SESSION [QueryMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.client_hostname,
sqlserver.username
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryMonitoring.xel',
max_file_size=(100),
max_rollover_files=(5)
)
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY=30 SECONDS,
STARTUP_STATE=OFF
);
ALTER EVENT SESSION [QueryMonitoring] ON SERVER STATE = START;
8.1.2 Filtern nach Datenbank oder Anwendung
Fokus auf spezifische Datenbanken oder Anwendungen mithilfe von Prädikaten:
CREATE EVENT SESSION [AppSpecificMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.client_app_name)
WHERE (
[sqlserver].[database_name] = N'YourDatabase'
AND [sqlserver].[client_app_name] LIKE N'YourApplication%'
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\AppMonitoring.xel'
);
8.2 Erfassung von Deadlock-Informationen
Die Analyse von Deadlocks erfordert die Erfassung detaillierter Informationen über widersprüchliche Transaktionen.
8.2.1 xml_deadlock_report-Ereignis
Erstellen Sie eine Sitzung, um vollständige Deadlock-Diagramme zu erfassen:
CREATE EVENT SESSION [DeadlockMonitoring] ON SERVER
ADD EVENT sqlserver.xml_deadlock_report(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Deadlocks.xel'
)
WITH (STARTUP_STATE=ON);
ALTER EVENT SESSION [DeadlockMonitoring] ON SERVER STATE = START;
8.2.2 Analyse von Deadlock-Graphen
Informationen zu Deadlocks extrahieren und analysieren:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS DeadlockTime,
EventXML.query('.') AS DeadlockGraph
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\Deadlocks*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'xml_deadlock_report';
Der Deadlock-Graph enthält Details über Prozesse, Ressourcen und die Auswahl der Opfer.
8.3 Probleme mit der Abfrageleistung beim Tracking
Identifizieren Sie leistungsschwache Abfragen mithilfe von Metriken zu Dauer und Ressourcenverbrauch.
8.3.1 Erkennung langlaufender Abfragen
Abfragen erfassen, die bestimmte Dauerschwellenwerte überschreiten:
CREATE EVENT SESSION [LongRunningQueries] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.plan_handle
)
WHERE ([duration] > 5000000) -- 5 seconds in microseconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\LongQueries.xel'
);
8.3.2 Analyse des Ausführungsplans
Abfragepläne für die Leistungsanalyse erfassen:
CREATE EVENT SESSION [QueryPlans] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan(
ACTION(
sqlserver.sql_text,
sqlserver.database_name
)
WHERE ([duration] > 10000000) -- 10 seconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryPlans.xel',
max_file_size=(200)
);
8.4 Überwachung von Anmelde- und Sicherheitsereignissen
Protokollierung von Authentifizierungs- und Autorisierungsaktivitäten für Sicherheitsaudits.
8.4.1 Protokollierung von Anmeldeerfolgen und -fehlern
Überwachen Sie sowohl erfolgreiche als auch fehlgeschlagene Anmeldeversuche:
CREATE EVENT SESSION [LoginMonitoring] ON SERVER
ADD EVENT sqlserver.login(
ACTION(
sqlserver.client_hostname,
sqlserver.client_app_name
)
),
ADD EVENT sqlserver.login_failed(
ACTION(
sqlserver.client_hostname
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Logins.xel'
)
WITH (STARTUP_STATE=ON);
8.4.2 Berechtigungsänderungen
Änderungen der Sicherheitsberechtigungen verfolgen:
CREATE EVENT SESSION [SecurityChanges] ON SERVER
ADD EVENT sqlserver.server_principal_management_event,
ADD EVENT sqlserver.database_principal_management_event,
ADD EVENT sqlserver.database_permission_change_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SecurityAudit.xel'
);
8.5 Überwachung auf Datenbankebene
Überwachen Sie datenbankspezifische Operationen und Zustandsänderungen.
8.5.1 Sicherungs- und Wiederherstellungsereignisse
Sicherungs- und Wiederherstellungsvorgänge verfolgen:
CREATE EVENT SESSION [BackupMonitoring] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace,
ADD EVENT sqlserver.databases_backup_restore_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\BackupRestore.xel'
);
8.5.2 Datenbankstatusänderungen
Überwachen Sie die Datenbankzustandsübergänge:
CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER ADD EVENT sqlserver.database_started, ADD EVENT sqlserver.database_stopped ADD TARGET package0.ring_buffer;
8.6 Erkennung von Datenbankbeschädigungen und Integritätsproblemen
SQL Server Extended Events bietet Frühwarnfunktionen zur Erkennung potenzieller Datenbankbeschädigungen und ermöglicht so ein proaktives Eingreifen, bevor Probleme eskalieren.
8.6.1 Wichtige Ereignisse zur Korruptionserkennung
Mehrere Ereignisse deuten auf mögliche Datenbeschädigung oder E/A-Probleme hin.
8.6.1.1 Fehlerbericht-Ereignis für kritische Fehler
Das error_reported-Ereignis erfasst alle SQL Server Fehler, einschließlich korruptionsbedingter Fehlernummern:
ADD EVENT sqlserver.error_reported(
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825, 832, 855, 856)
)
)
Fehler 823 weist auf E/A-Fehler hin, 824 signalisiert logische Konsistenzfehler und 825 meldet erfolgreiche Lese-Wiederholungsversuche, die auf Hardwareprobleme hinweisen können.
8.6.1.2 Ereignis „database_suspect_data_page“
Dieses Ereignis wird ausgelöst, wenn SQL Server stößt auf eine verdächtige Seite:
ADD EVENT sqlserver.database_suspect_data_page
Verdächtige Seiten weisen auf mögliche Beschädigungen hin und werden in der Tabelle msdb.dbo.suspect_pages protokolliert.
8.6.1.3 errorlog_scribed-Ereignis
Erfassen Sie die in die SQL Server Fehlerprotokoll:
ADD EVENT sqlserver.errorlog_written(
WHERE ([severity] >= (16))
)
8.6.2 Erstellen einer Korruptionsüberwachungssitzung
Richten Sie eine umfassende Sitzung zur Korruptionserkennung und -überwachung ein.
8.6.2.1 Filterung nach Korruptionsfehlernummern (823, 824, 825)
Erstellen Sie eine zielgerichtete Sitzung mit Schwerpunkt auf Korruptionsindikatoren:
CREATE EVENT SESSION [CorruptionDetection] ON SERVER
ADD EVENT sqlserver.error_reported(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
WHERE (
[error_number] IN (823, 824, 825, 832, 855, 856)
OR [severity] >= (20)
)
),
ADD EVENT sqlserver.database_suspect_data_page(
ACTION(
sqlserver.database_name
)
)
8.6.2.2 Angemessene Schweregrade festlegen
Schließen Sie auch schwerwiegende Fehler ein, die auf Korruption hindeuten könnten:
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825)
)
Ein Schweregrad von 20 und höher deutet auf systemweite Probleme hin, die häufig mit Korruption zusammenhängen.
8.6.2.3 Konfigurieren des Ereignisdateiziels für Warnungen
Korruptionsereignisse zur Analyse und Alarmierung speichern:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\CorruptionMonitoring.xel',
max_file_size=(50),
max_rollover_files=(10)
)
WITH (
STARTUP_STATE=ON,
MAX_DISPATCH_LATENCY=5 SECONDS
);
ALTER EVENT SESSION [CorruptionDetection] ON SERVER STATE = START;
8.6.3 Analyse von Korruptionsereignisdaten
Korruptionsbezogene Ereignisse aus den erfassten Daten extrahieren und interpretieren.
8.6.3.1 Identifizierung verdächtiger Seiten
Abfrage für database_suspect_data_page-Ereignisse:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS EventTime,
EventXML.value('(event/data[@name="database_id"]/value)[1]', 'INT') AS DatabaseID,
EventXML.value('(event/data[@name="file_id"]/value)[1]', 'INT') AS FileID,
EventXML.value('(event/data[@name="page_id"]/value)[1]', 'BIGINT') AS PageID,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'database_suspect_data_page';
8.6.3.2 Extrahieren von Fehlerdetails und Kontext
Analysiere die gemeldeten Fehlerereignisse auf Korruptionsmuster:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS ErrorTime,
EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') AS ErrorNumber,
EventXML.value('(event/data[@name="severity"]/value)[1]', 'INT') AS Severity,
EventXML.value('(event/data[@name="message"]/value)[1]', 'VARCHAR(MAX)') AS ErrorMessage,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'error_reported'
AND EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') IN (823, 824, 825);
8.6.4 Integration mit DBCC CHECKDB
Nutzen Sie die Daten erweiterter Ereignisse als Steuerungsinstrumente. DBCC-CHECKDB Ausführung.
8.6.4.1 Auslösen von DBCC CHECKDB basierend auf Ereignissen
Wenn Beschädigungsereignisse erkannt werden, führen Sie DBCC CHECKDB zur umfassenden Überprüfung aus:
-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Extended Events liefert die Frühwarnung, während DBCC CHECKDB eine gründliche Validierung durchführt.
8.6.4.2 Automatisierte Arbeitsabläufe zur Korruptionsbekämpfung
Automatisierte Reaktionen durch Überwachung der Ereignisdatei implementieren:
- Einrichtung SQL Server Agentenauftrag zum regelmäßigen Abfragen der Ereignisdatei zur Korruptionsüberwachung.
- Wenn Beschädigungsereignisse gefunden werden, führen Sie DBCC CHECKDB auf der betroffenen Datenbank aus.
- Senden Sie E-Mail-Benachrichtigungen an Datenbankadministratoren mit Ereignisdetails und DBCC CHECKDB-Ergebnissen.
- Die Ergebnisse werden in einer zentralen Überwachungstabelle zur Trendanalyse protokolliert.
8.6.4.3 Proaktive Überwachung und Leistung in Einklang bringen
Extended Events bietet im Vergleich zur häufigen Ausführung von DBCC CHECKDB eine ressourcenschonende Korruptionserkennung:
- Führen Sie erweiterte Ereignisse kontinuierlich aus, um Datenbeschädigungen in Echtzeit zu erkennen.
- Führen Sie DBCC CHECKDB nur aus, wenn Anzeichen für eine Beschädigung auftreten.
- Planen Sie regelmäßige DBCC CHECKDB-Prüfungen während der Wartungsfenster ein.
- Nutzen Sie erweiterte Ereignisse, um festzustellen, welche Datenbanken sofortige Aufmerksamkeit erfordern.
Dieser Ansatz ermöglicht eine proaktive Überwachung ohne den erheblichen Ressourcenverbrauch ständiger Integritätsprüfungen.
8.6.4.4 Beschädigte Datenbank reparieren
Werden Beschädigungen in der Datenbank festgestellt, können Sie mit DBCC CHECKDB kleinere Beschädigungen beheben. Schlägt dies fehl, können Sie ein Drittanbieterprogramm ausprobieren. SQL-Datenbank-Wiederherstellungstool, was im Allgemeinen eine höhere Wiederherstellungsrate bei stark beschädigten Datenbanken bietet.
9. Serverbezogene vs. datenbankbezogene erweiterte Ereignisse
9.1 Serverbezogene Ereignissitzungen
Serverweite Sitzungen überwachen die Aktivität im gesamten Netzwerk. SQL Server Diese Sitzungen werden mit der ON SERVER-Klausel erstellt und in der Masterdatenbank gespeichert.
CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\ServerWide.xel'
);
Serverweite Sitzungen erfassen Ereignisse aus allen Datenbanken und eignen sich für die Überwachung auf Instanzebene.
9.2 Ereignissitzungen mit Datenbankbezug (Azure SQL-Datenbank)
Datenbankbezogene Sitzungen sind auf eine einzelne Datenbank beschränkt und werden hauptsächlich in Azure SQL-Datenbanken verwendet, wo der Zugriff auf Serverebene eingeschränkt ist:
CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'DatabaseMonitoring.xel'
);
In Azure SQL Database werden Ereignisdateien im Azure Blob Storage und nicht im lokalen Dateisystem gespeichert.
9.3 Unterschiede und Anwendungsfälle
Serverweite Sitzungen ermöglichen eine umfassende Überwachung aller Datenbanken, erfordern jedoch erhöhte Berechtigungen. Datenbankweite Sitzungen bieten Isolation und eignen sich zur Überwachung bestimmter Anwendungen oder Mandanten.
Verwenden Sie serverbezogene Sitzungen für die zentrale Überwachung, die Leistungsanalyse datenbankübergreifend und für Sicherheitsaudits. Datenbankbezogene Sitzungen eignen sich für Azure SQL-Datenbanken, Mandantenumgebungen oder wenn Sie die Überwachungsverantwortung an Anwendungsteams delegieren.
10. Erweiterte Ereignisse in der Azure SQL-Datenbank
10.1 Azure-spezifische Überlegungen
Azure SQL-Datenbank implementiert erweiterte Ereignisse mit einigen Unterschieden zur lokalen Version. SQL ServerSitzungen sind standardmäßig datenbankbezogen, und die Ereignisdateispeicherung verwendet Azure Blob Storage anstelle lokaler Dateisysteme.
Die Authentifizierung bei Azure Blob Storage erfordert ein SAS-Token, das im Ereignisdateiziel konfiguriert ist. Die Verbindungszeichenfolgen verweisen auf das Speicherkonto und den Container, in dem die Ereignisdateien gespeichert sind.
10.2 Verfügbare Ziele in Azure
Azure SQL-Datenbank unterstützt diese erweiterten Ereignisziele:
- event_file: Schreibt in Azure Blob Storage
- ring_buffer: Speicherbasierter Speicher mit dem gleichen Verhalten wie lokal
- Ereigniszähler: Zählt das Auftreten von Ereignissen
Das Ziel „event_file“ erfordert eine Konfiguration mit Azure Blob Storage-Anmeldeinformationen:
ADD TARGET package0.event_file(
SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)
10.3 Erstellen von Sitzungen mit Datenbankbezug
Erstellen einer Sitzung in Azure SQL-Datenbank:
CREATE EVENT SESSION [AzureMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name)
)
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB);
ALTER EVENT SESSION [AzureMonitoring] ON DATABASE STATE = START;
Datenbankbezogene Sitzungen in Azure verhalten sich ähnlich wie serverbezogene Sitzungen lokal, allerdings ist der Geltungsbereich auf die aktuelle Datenbank beschränkt.
11. Bewährte Verfahren und Leistungsoptimierung
11.1 Minimierung der Leistungsauswirkungen
Erweiterte Ereignisse sind auf minimalen Overhead ausgelegt, eine fehlerhafte Konfiguration kann jedoch die Leistung beeinträchtigen. Beachten Sie folgende Richtlinien:
- Verwenden Sie spezifische Prädikate, um Ereignisse zu filtern, anstatt alles zu erfassen.
- Vermeiden Sie die Erfassung unnötiger Aktionen, die zusätzlichen Verarbeitungsaufwand verursachen.
- Wählen Sie geeignete Ziele basierend auf den Datenaufbewahrungsanforderungen aus.
- Angemessene Puffergrößen und Versandlatenzen festlegen
- Überwachen Sie den Sitzungsressourcenverbrauch mithilfe von DMVs
11.2 Die richtigen Ereignisse und Filter auswählen
Wählen Sie Ereignisse aus, die Ihre Überwachungsziele direkt adressieren. Vermeiden Sie häufige Ereignisse, sofern nicht unbedingt erforderlich, und verwenden Sie stets Prädikate, um das Datenvolumen zu reduzieren.
Anstatt beispielsweise alle sql_statement_completed-Ereignisse zu erfassen, können Sie nach bestimmten Datenbanken oder Dauerschwellenwerten filtern:
WHERE (
[sqlserver].[database_name] = N'ProductionDB'
AND [duration] > 1000000
)
11.3 Richtlinien zur Zielauswahl
Wählen Sie die Ziele anhand Ihrer Analyseanforderungen aus:
- Verwenden Sie die Ereignisdatei für detaillierte historische Analysen und die langfristige Datenspeicherung.
- Verwenden Sie ring_buffer für die Echtzeitüberwachung mit minimaler E/A-Auswirkung
- Verwenden Sie event_counter, wenn nur die Häufigkeit relevant ist.
- Verwenden Sie ein Histogramm zur Verteilungsanalyse.
- Verwenden Sie pair_matching für die Analyse korrelierter Ereignisse.
11.4 Empfehlungen zur Sitzungskonfiguration
Konfigurieren Sie Sitzungen mit angemessenen Ressourcenbeschränkungen:
- Legen Sie MAX_MEMORY basierend auf dem erwarteten Ereignisvolumen und den Serverressourcen fest.
- Verwenden Sie ALLOW_SINGLE_EVENT_LOSS, um in den meisten Szenarien den Overhead zu minimieren.
- Setzen Sie MAX_DISPATCH_LATENCY, um ein Gleichgewicht zwischen Echtzeitanforderungen und Leistung herzustellen.
- Verwenden Sie die PER_CPU-Speicherpartitionierung auf Mehrprozessorsystemen.
- Vermeiden Sie STARTUP_STATE=ON, es sei denn, eine kontinuierliche Überwachung ist erforderlich.
11.5 Verwaltung der Ereignisdateigröße und -aufbewahrung
Konfigurieren Sie die Dateirotation, um eine unbegrenzte Festplattennutzung zu verhindern:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Session.xel',
max_file_size=(100),
max_rollover_files=(10)
)
Diese Konfiguration speichert ca. 1 GB Ereignisdaten (10 Dateien × 100 MB). Passen Sie die Einstellungen Ihren Aufbewahrungsanforderungen und dem verfügbaren Speicherplatz an.
12. Fehlerbehebung bei erweiterten Ereignissen
12.1 Häufige Probleme und Lösungen
Häufige Probleme bei erweiterten Ereignissen sind unter anderem, dass Sitzungen keine Daten erfassen, die Leistung beeinträchtigt wird, Probleme mit dem Dateiziel auftreten und unerwartetes Sitzungsverhalten auftritt.
12.2 Sitzung erfasst keine Daten
Wenn eine Sitzung die erwarteten Ereignisse nicht erfasst:
- Überprüfen Sie, ob die Sitzung mit sys.dm_xe_sessions gestartet wurde.
- Überprüfen Sie die Prädikate, um sicherzustellen, dass sie nicht alle Ereignisse herausfiltern.
- Bestätigen Sie, dass Ereignisse ausgelöst werden, indem Sie Filter vorübergehend entfernen.
- Überprüfen Sie die Berechtigungen, um sicherzustellen, dass Sie Zugriff auf die Sitzungsdaten haben.
- Prüfen Sie, ob die Zielkonfiguration korrekt und beschreibbar ist.
SELECT name, create_time FROM sys.dm_xe_sessions WHERE name = 'YourSessionName';
12.3 Leistungseinbußen
Falls erweiterte Ereignisse Leistungsprobleme verursachen:
- Fügen Sie Prädikate hinzu, um das Ereignisvolumen zu reduzieren.
- Entfernen Sie unnötige Aktionen, die zusätzliche Daten erfassen.
- Erhöhen Sie MAX_DISPATCH_LATENCY, um die Schreibfrequenz zu reduzieren.
- Ändern Sie EVENT_RETENTION_MODE in ALLOW_SINGLE_EVENT_LOSS.
- Erwägen Sie die Verwendung von ring_buffer anstelle von event_file für hochfrequente Ereignisse.
12.4 Probleme mit Dateizielen
Dateizielprobleme hängen oft mit Berechtigungen oder Speicherplatzproblemen zusammen:
- Überprüfen Sie die SQL Server Das Dienstkonto besitzt Schreibberechtigungen für das Zielverzeichnis.
- Stellen Sie sicher, dass ausreichend Speicherplatz vorhanden ist.
- Prüfen Sie, ob der angegebene Pfad existiert und erreichbar ist.
- Überprüfen Sie die Konfiguration der Dateirotation, falls die Dateien nicht wie erwartet rotiert werden.
12.5 Debuggen mit Systemansichten
Nutzen Sie DMVs zur Diagnose von Problemen mit erweiterten Ereignissen:
-- Check session status
SELECT s.name, s.create_time, s.total_regular_buffers, s.total_large_buffers
FROM sys.dm_xe_sessions AS s;
-- View session targets and their status
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
CAST(t.target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
-- Check for dropped events
SELECT s.name, s.dropped_event_count, s.dropped_buffer_count
FROM sys.dm_xe_sessions AS s;
13. Fortgeschrittene Themen
13.1 Erstellen benutzerdefinierter Ereignispakete
Fortgeschrittene Benutzer können benutzerdefinierte Ereignispakete erstellen, um diese zu erweitern. SQL Server Erweiterte Ereignisfunktionalität. Dies erfordert eine C++-Entwicklung und -Integration mit der SQL Server Erweiterbarkeitsrahmen.
Kundenspezifische Pakete ermöglichen die Überwachung anwendungsspezifischer Ereignisse oder die Integration von Überwachungssystemen von Drittanbietern in die Extended Events-Infrastruktur.
13.2 Vorlagen für Veranstaltungssitzungen
SSMS bietet integrierte Vorlagen für gängige Überwachungsszenarien. Greifen Sie beim Erstellen neuer Sitzungen über den Assistenten auf die Vorlagen zu:
- Klicken Sie im Dialogfeld „Neue Sitzung“ auf die Schaltfläche Template Dropdown-Liste.
- Wählen Sie aus verfügbaren Vorlagen wie Abfragedetailverfolgung oder Systemzustand.
- Passen Sie die Vorlage an Ihre spezifischen Anforderungen an.
13.3 Integration mit Überwachungslösungen
Erweiterte Ereignisdaten können als Grundlage für Überwachungslösungen in Unternehmen dienen:
- Export von Ereignisdaten in zentrale Protokollierungssysteme
- Ereignisdateien analysieren und Daten in Überwachungsdatenbanken laden
- Erstellen Sie benutzerdefinierte Dashboards mithilfe von BI-Tools.
- Alarme basierend auf bestimmten Ereignismustern auslösen
- Korrelat SQL Server Ereignisse mit Anwendungs- und Infrastrukturmetriken
13.4 Automatisierung und Terminplanung
Automatisieren Sie die Verwaltung erweiterter Ereignisse mithilfe von SQL Server Agenten:
- Erstellen Sie Aufträge zum Starten/Beenden von Sitzungen während bestimmter Zeitfenster.
- Analyse und Berichterstattung von Terminereignissen
- Implementieren Sie Richtlinien zur Datenaufbewahrung, indem Sie alte Ereignisdateien archivieren oder löschen.
- Automatisierte Reaktion auf erkannte Zustände wie Leistungsprobleme oder Sicherheitsereignisse
14. Migration von SQL Server Profiler
14.1 SQL Server Zuordnung von Profiler-Ereignissen zu erweiterten Ereignissen
Microsoft stellt eine Zuordnung zwischen SQL Server Profiler Ereignisse und erweiterte Ereignisse. Häufige Zuordnungen umfassen:
- SQL:BatchCompleted -> sql_batch_completed
- SQL:BatchStarting -> sql_batch_starting
- SQL:StmtCompleted -> sql_statement_completed
- SQL:StmtStarting -> sql_statement_starting
- Deadlock-Graph -> xml_deadlock_report
- Audit-Login -> Anmeldung
- Audit-Logout -> Logout
14.2 Konvertierung von Trace-Definitionen
Vorhandene konvertieren SQL Server Profiler verfolgt Sitzungen erweiterter Ereignisse, indem es äquivalente Ereignisse identifiziert und entsprechende Prädikate konfiguriert. SSMS bietet Unterstützung für gängige Konvertierungen.
Überprüfen Sie die Ablaufverfolgungsfilter und konvertieren Sie sie in Prädikate für erweiterte Ereignisse. Aktionen in erweiterten Ereignissen ersetzen Ablaufverfolgungsspalten von SQL Server Profiler.
14.3 Leistungsvergleich
Erweiterte Events bieten eine deutlich bessere Leistung als SQL Server Profiler. Benchmark-Studien zeigen, dass Extended Events weniger CPU-Zyklen verbrauchen und einen geringeren Einfluss auf den Transaktionsdurchsatz haben.
Erweiterte Ereignisse nutzen asynchrone Verarbeitung und optimiertes Speichermanagement, während SQL Server Profiler verwendet eine synchrone Ereigniserfassung, die so lange blockiert, bis die Trace-Verarbeitung abgeschlossen ist.
15. Fazit
15.1 Zusammenfassung der wichtigsten Konzepte
SQL Server Extended Events bietet ein leistungsstarkes, schlankes Framework für Überwachung und Fehlerbehebung. SQL ServerDie Architektur besteht aus Ereignissen, Aktionen, Prädikaten, Zielen und Sitzungen, die zusammenarbeiten, um relevante Serveraktivitäten zu erfassen.
Sitzungen lassen sich mit SSMS oder T-SQL erstellen und bieten so Flexibilität sowohl für die Ad-hoc-Fehlerbehebung als auch für die automatisierte Überwachung. Verschiedene Zieltypen unterstützen unterschiedliche Analyseansätze, von der Echtzeitüberwachung mit ring_buffer bis hin zur historischen Analyse mit event_file.
Extended Events bietet im Vergleich zu SQL Server Profiler bietet umfassendere Überwachungsfunktionen. Das System ermöglicht Datenbankadministratoren und Entwicklern die Diagnose von Problemen, die Optimierung der Leistung, die Verbesserung der Sicherheit und die Einhaltung von Vorschriften.
15.2 Nächste Schritte und weiterführende Ressourcen
Um Ihre SQL Server XEvents-Expertise:
- Implementieren Sie erweiterte Ereignisse in Testumgebungen, um praktische Erfahrungen zu sammeln.
- Die vollständigen Ereigniskataloge und detaillierte Syntaxreferenzen finden Sie in der Microsoft-Dokumentation.
- Registrieren SQL Server Gemeinschaftsforen zum Lernen aus den Erfahrungen anderer
- Erkunden Sie fortgeschrittene Szenarien wie benutzerdefinierte Pakete und die Integration mit Überwachungsplattformen.
- Entwickeln Sie eine Bibliothek mit Sitzungsvorlagen für gängige Überwachungsszenarien.
Abschnitt 16 (Häufig gestellte Fragen)
F: Was sind SQL Server Erweiterte Veranstaltungen?
A: SQL Server Extended Events ist ein leichtgewichtiges Leistungsüberwachungssystem, das in die SQL Server Datenbank-Engine, die detaillierte Informationen über Servervorgänge mit minimalem Aufwand erfasst.
F: Worin unterscheiden sich Extended Events von SQL Server Profiler?
A: Erweiterte Ereignisse bieten eine bessere Leistung, einen geringeren Overhead und eine flexiblere Konfiguration als SQL Server Profiler. SQL Server Profiler ist veraltet, und Microsoft empfiehlt, für alle Überwachungsaufgaben Extended Events zu verwenden.
F: Können verlängerte Ereignisse Auswirkungen haben? SQL Server Performance?
A: Bei korrekter Konfiguration mit geeigneten Prädikaten und Ressourcenbeschränkungen haben erweiterte Ereignisse nur minimale Auswirkungen auf die Leistung. Eine fehlerhafte Konfiguration ohne Filterung kann die Leistung beeinträchtigen.
F: Welche Berechtigungen sind erforderlich, um Sitzungen für erweiterte Ereignisse zu erstellen?
A: Sie benötigen die Berechtigung ALTER ANY EVENT SESSION für serverseitige Sitzungen oder die Berechtigung CONTROL für die Datenbank für datenbankseitige Sitzungen.
F: Wie kann ich die Daten der erweiterten Ereignisse anzeigen?
A: Verwenden SQL Server Management Studio kann den Live-Datenbetrachter verwenden, Ereignisdateien mit sys.fn_xe_file_target_read_file abfragen oder Ringpufferdaten über DMVs abfragen.
F: Können erweiterte Ereignisse Datenbankbeschädigungen erkennen?
A: Ja, Extended Events können korruptionsbedingte Fehler (823, 824, 825) und verdächtige Seitenereignisse erfassen und so frühzeitig vor potenziellen Korruptionsproblemen warnen.
F: Worin besteht der Unterschied zwischen Ereignissen, Handlungen und Prädikaten?
A: Ereignisse sind Vorkommnisse, die Sie überwachen möchten. Aktionen fügen den erfassten Ereignissen zusätzliche Informationen hinzu. Prädikate filtern Ereignisse anhand von Bedingungen, um das Datenvolumen zu reduzieren.
F: Wie kann ich Abfragen von bestimmten Anwendungen oder Datenbanken überwachen?
A: Verwenden Sie Prädikate in Ihrer Ereigniskonfiguration, um nach Datenbankname, Client-App-Name oder anderen relevanten Feldern zu filtern.
F: Welche Ziele sollte ich für erweiterte Ereignisse verwenden?
A: Verwenden Sie event_file für die persistente Speicherung und historische Analyse, ring_buffer für die Echtzeitüberwachung mit geringem Overhead, event_counter für die einfache Frequenzverfolgung und histogram für die Verteilungsanalyse.
F: Sind erweiterte Ereignisse in Azure SQL-Datenbank verfügbar?
A: Ja, Azure SQL Database unterstützt datenbankbezogene erweiterte Ereignisse, wobei Ereignisdateien in Azure Blob Storage gespeichert werden.
F: Wie kann ich Probleme mit einer Extended Events-Sitzung beheben, die keine Daten erfasst?
A: Überprüfen Sie, ob die Sitzung gestartet wurde, prüfen Sie, ob Prädikate nicht alle Ereignisse filtern, bestätigen Sie die Zielkonfiguration und überprüfen Sie die Berechtigungen mithilfe der System-DMVs.
F: Kann ich die Verwaltung erweiterter Ereignisse automatisieren?
A: Ja, verwenden SQL Server Agentenaufgaben zum Starten/Beenden von Sitzungen, Analysieren von Ereignisdateien, Implementieren von Aufbewahrungsrichtlinien und Reagieren auf erkannte Zustände.
Referenzen
- Schnellstart: Erweiterte Ereignisse in SQL Server – Microsoft Learn
- Erweiterte Ereignisübersicht – Microsoft Learn
- SQL Server Erweiterte Veranstaltungssitzungen – Microsoft Learn
- Ziele für erweiterte Ereignisse in SQL Server – Microsoft Learn
- SQL Server Erweiterte Ereignis-Engine – Microsoft Learn
- SQL Server Profiler: Vollständiger Leitfaden
- DBCC CHECKDB: Vollständiger Leitfaden
- DataNumen SQL Recovery
Über den Autor
Yuan Sheng ist ein erfahrener Datenbankadministrator (DBA) mit über 10 Jahren Erfahrung in SQL Server Umgebungen und Unternehmensdatenbankverwaltung. Er hat Hunderte von Datenbankwiederherstellungsszenarien in Finanzdienstleistungs-, Gesundheits- und Fertigungsunternehmen erfolgreich gelöst.
Yuan ist spezialisiert auf SQL Server Datenbankwiederherstellung Hochverfügbarkeitslösungenund Leistungsoptimierung. Seine umfassende praktische Erfahrung umfasst die Verwaltung von Multi-Terabyte-Datenbanken, die Implementierung Always On-Verfügbarkeitsgruppenund die Entwicklung automatisierter Backup- und Wiederherstellungsstrategien für unternehmenskritische Systeme.
Durch sein technisches Fachwissen und seinen praktischen Ansatz konzentriert sich Yuan auf die Erstellung umfassender Anleitungen, die Datenbankadministratoren und IT-Experten bei der Lösung komplexer SQL Server Herausforderungen effizient. Er bleibt auf dem Laufenden mit den neuesten SQL Server und die sich entwickelnden Datenbanktechnologien von Microsoft und testet regelmäßig Wiederherstellungsszenarien, um sicherzustellen, dass seine Empfehlungen den bewährten Vorgehensweisen der Praxis entsprechen.
Haben Sie Fragen zu SQL Server Wiederherstellung oder benötigen Sie zusätzliche Anleitung zur Datenbank-Fehlerbehebung? Yuan begrüßt Feedback und Vorschläge zur Verbesserung dieser technischen Ressourcen.

















