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 DiagnoseostIC-Funktionen 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: Puffertemporarily speichert Ereignisdaten im Speicher, bevor sie geschrieben werden. tarDieser Puffermechanismus verbessert die Leistung durch die Reduzierung von E/A-Operationen. Puffergröße und Verwaltungseinstellungen können konfiguriert werden, um die Speichernutzung mit den Anforderungen der Datenerfassung in Einklang zu bringen.
- Session: Eine Sitzung definiert den Umfang der Ereignisüberwachung. Sie legt fest, welche Ereignisse erfasst, welche Aktionen ausgeführt und welche Prädikate angewendet werden und wo die Ergebnisse gespeichert werden. Sitzungen können erstellt, geändert und aktualisiert werden.tarted und stoppten unabhängig voneinander.
- TarInstanz abrufen: TarGet-Instanzen stellen die Speicherziele für erfasste Ereignisdaten dar. Jede Sitzung kann in eine oder mehrere dieser Instanzen schreiben. tarGets, wie z. B. Dateien, Ringpuffer oder Zähler. Tarverarbeitet und speichert die Ereignisinformationen zur späteren Analyse.
2.2 Veranstaltungspakete
SQL Server Extended Events organisiert Funktionalität in Paketen. Jedes Paket enthält zugehörige Ereignisse, Aktionen, Typen, Prädikate und tarGä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 Ergänzungen hinzutarInformationen werden erfassten Ereignissen zugeordnet. 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_h.ostName zur Nachverfolgung des Ursprungsservers. Aktionen liefern wichtigen Kontext für die Fehlerbehebung und Analyse.
2.5 Tarbekommt
Tarbestimmt, wie und wo Ereignisdaten gespeichert werden. SQL Server Erweiterte Ereignisse unterstützen mehrere tarTypen abrufen, einschließlich:
- 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, aber nicht starDie Sitzung befindet sich im gestoppten Zustand, bis sie explizit aktiviert wird.
- Die Anweisung ALTER EVENT SESSION ändert die Sitzungskonfiguration oder ihren Status zwischen gestoppt und aktiv.tarted.
- Die DROP EVENT SESSION-Anweisung entfernt die Sitzungsdefinition vollständig vom Server.
3.2 Sitzungsinhalte und -merkmale
Jede Sitzung enthält eine Sammlung von Ereignissen und Aktionen. tarSitzungen haben implizite Grenzen, die ihren Umfang und ihr Verhalten definieren. Konfigurationsoptionen steuern die Speicherverwaltung, die Ereignisspeicherung und die Latenzzeit der Ereignisverteilung.
Zu den Sitzungsmerkmalen gehört, ob sie über Serverresultate hinweg bestehen bleiben.tarts, die maximale Speicherzuweisung und der Umgang mit Speicherdruck. Diese Einstellungen haben einen erheblichen Einfluss auf das Sitzungsverhalten und den Ressourcenverbrauch.
3.3 Sitzungsgrenzen und Pakete
Sitzungsgrenzen definieren Beziehungen zwischen Ereignissen. tarGets und Pakete. 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 Ihrem System verbunden. tarHolen Sie sich ein Beispiel. Machen Sie sich mit den Überwachungsanforderungen vertraut und identifizieren Sie, welche Ereignisse und tarwird am besten auf Ihre Bedürfnisse zugeschnitten.
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 Management -> Erweiterte Ereignisse.
- Der Knoten „Erweiterte Ereignisse“ enthält Fachsitzungen und Angebote 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 Start die Ereignissitzung auf Server starTUP 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
Die 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 EreignisbibliothekraryDurchsuchen 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
Die 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 Tarbekommt Bereich, wählen Sie einen tarWählen Sie den Typ aus der Dropdown-Liste aus.
(1) Ereignisdatei Tarbekommen
Die Ereignisdatei target speichert Daten in Dateien mit der Erweiterung .xel auf der Festplatte:
- Wählen Sie Ereignisdatei von der tarDropdown-Menü „Typ abrufen“ öffnen.
- Geben Sie den Dateipfad an, z. B. C:\temp\IhreSitzung_Target.xel.
- Konfigurieren Sie die Rollover-Optionen, um den Speicherplatz durch Festlegen der maximalen Dateigröße und Dateianzahl zu verwalten.
- Die tarSchreibvorgänge werden kontinuierlich abgerufen, bis die Sitzung beendet wird oder die Speichergrenzen erreicht sind.
(2) Ringpuffer Tarbekommen
Der Ringpuffer target speichert Ereignisse im Arbeitsspeicher für den schnellen Zugriff ohne Festplattenzugriff:
- Wählen Sie Ringpuffer wie die tarDatentyp abrufen.
- 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 Tarbekommen
Der Ereigniszähler tarDie Funktion „get“ zählt einfach das Auftreten von Ereignissen, ohne detaillierte Daten zu speichern. Dies minimiert den Aufwand, wenn Sie lediglich Häufigkeitsinformationen benötigen.
(4) Histogramm Tarbekommen
Das Histogramm tarEreignisse werden anhand eines bestimmten Feldwerts gruppiert, um Verteilungsstatistiken zu erstellen. Dies ist hilfreich, um häufig auftretende Muster oder besonders häufige Werte zu identifizieren.
(5) Paarübereinstimmung Tarbekommen
Das Paar-Matching tarEs werden Korrelationen zu verwandten Ereignissen wie dem Erwerb und der Freigabe von Sperren ermittelt. Dies ermöglicht die Analyse von gekoppelten Operationen und deren zeitlichen Beziehungen.
4.3.4 Erweiterte Einstellungen
Die 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 Ergänzungen hinzuzufügentary-Informationen, wie z. B. Datenbankname oder Client-App-Name.
- Ü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 StarSitzungen verwalten und verwalten
Nach der Konfiguration Ihrer Sitzung können Sie start es und überwachen Sie seinen Betrieb:
- 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 Start-Sitzung 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 für die Sitzungskonfiguration.
5.2 Erstellen einer grundlegenden Ereignissitzung
Eine Basissitzung überwacht bestimmte Ereignisse und schreibt die Ergebnisse in eine tarSo bauen Sie die wichtigsten Komponenten.
5.2.1 Sitzungsnamen und Optionen definieren
Start durch Erstellen der 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 eines Ereignisses Tarbekommt
Targets definiert, wo Ereignisdaten gespeichert und wie sie verarbeitet werden.
5.3.1 HINZUFÜGEN TARGET-Syntax
Speichern tarwird mit ADD verwendet TARGET-Klausel, nachdem alle Ereignisse definiert wurden:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
Das Präfix package0 kennzeichnet die tar„get“ ist im Basispaket enthalten.
5.3.2 Konfigurieren TarParameter abrufen
. Der tarDer Typ „get“ akzeptiert bestimmte Parameter. Für „event_file“ müssen Sie „filename“, „max_file_size“ und „max_rollover_files“ konfigurieren.
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
)
Die Optionen für EVENT_RETENTION_MODE umfassen ALLOW_SINGLE_EVENT_LOSS für minimalen Speicherverbrauch, ALLOW_MULTIPLE_EVENT_LOSS für moderaten Overhead und NO_EVENT_LOSS für vollständige Datenspeicherung.ost potenzielle Auswirkungen auf die Leistung.
5.4.2 MAX_DISPATCH_LATENCY
Legen Sie die maximale Zeit fest, die Ereignisse in Puffern verbleiben können, bevor sie geschrieben werden. tarerhält:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
Niedrigere Werte liefern mehr Echtzeitdaten am cost der erhöhten 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 StarSitzungen beenden, stoppen und ändern
Sitzungsstatus und -konfiguration werden über ALTER EVENT SESSION-Anweisungen verwaltet.
5.5.1 ALTER EVENT SESSION für Start/Stop
Starta-Sitzung nach der Erstellung:
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. Zusammenarbeit mit der Veranstaltung Targeht ins Detail
6.1 Ereignisdatei TarKonfiguration abrufen
Die Ereignisdatei target 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 von sys.fn_xe_file_target_read_file-Funktion:
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 TarNutzung abrufen
Der Ringpuffer tarSpeicherereignisse werden im Arbeitsspeicher abgelegt, um schnell auf die letzten Aktivitäten zugreifen zu können.
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 läuft. Daten sind lost wenn die Sitzung beendet wird oder der Server wieder aufgelöst wirdtarts.
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 Tarbekommen
Der Ereigniszähler tarDie Funktion „get“ ermöglicht einfaches Zählen ohne detaillierte Datenspeicherung:
ADD TARGET package0.event_counter
Dieser tarErfassen Sie die Ereignishäufigkeit mit minimalem Aufwand; dies ist besonders nützlich für die Überwachung großer Datenmengen, bei der nur die Anzahl zählt.
6.4 Histogramm Tarbekommen
Das Histogramm tarEreignisse nach Feldwerten gruppieren:
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 Tarbekommen
Das Paar-Matching tarRufe Korrelationen zu verwandten Ereignissen ab, z. B. Sperrbeschaffungen mit -freigaben:
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 Management -> 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_tarFunktion get_read_file
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 dem Ringpuffer extrahieren tarerhält:
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_tarbekommt
Ansehen tarwird aktiven Sitzungen zugeordnet:
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 tarbekommt
- 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 tarGeführte 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 der Ereignisdatei TarBenachrichtigungen erhalten
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.
Für die Authentifizierung bei Azure Blob Storage ist ein SAS-Token erforderlich, das in der Ereignisdatei konfiguriert ist. tarDie Verbindungszeichenfolgen verweisen auf das Speicherkonto und den Container, in dem Ereignisdateien gespeichert sind.
10.2 verfügbar Tarwird in Azure
Azure SQL-Datenbank unterstützt diese erweiterten Ereignisse tarerhält:
- 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
Die Ereignisdatei tarFür die Benachrichtigung ist eine Konfiguration mit Azure Blob Storage-Anmeldeinformationen erforderlich:
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 tarbasiert auf den Anforderungen an die Datenaufbewahrung
- 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 TarAuswahlrichtlinien anfordern
Wählen tarwird auf Grundlage Ihrer Analyseanforderungen erstellt:
- 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 für minimalen Overhead in most Szenarien
- 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 mit erweiterten Ereignissen sind unter anderem, dass Sitzungen keine Daten erfassen, Leistungseinbußen und Dateiprobleme. tarEs können Probleme und unerwartetes Sitzungsverhalten auftreten.
12.2 Sitzung erfasst keine Daten
Wenn eine Sitzung die erwarteten Ereignisse nicht erfasst:
- Überprüfen Sie, ob die Sitzung aktiv ist.tarted using sys.dm_xe_sessions.
- Überprüfen Sie die Prädikate, um sicherzustellen, dass sie nicht alle Ereignisse herausfiltern.
- Bestätigen Sie, dass Ereignisse gemäß Tempo ausgelöst werden.rarily Filter entfernen.
- Überprüfen Sie die Berechtigungen, um sicherzustellen, dass Sie Zugriff auf die Sitzungsdaten haben.
- Prüfe das tarDie Konfiguration ist korrekt und beschreibbar.
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 Kosten verursachen.tary-Daten.
- 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-Datei TarProbleme erhalten
Reichen Sie das tarDie Probleme hängen oft mit Berechtigungen oder Speicherplatz zusammen:
- Überprüfen Sie die SQL Server Das Dienstkonto hat Schreibberechtigungen für die tarVerzeichnis abrufen.
- 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 Jobs, um starSitzungen während bestimmter Zeitfenster stoppen
- 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, tarGets und Sessions, die zusammenarbeiten, um relevante Serveraktivitäten zu erfassen.
Sitzungen können mit SSMS oder T-SQL erstellt werden und bieten Flexibilität sowohl für die Ad-hoc-Fehlerbehebung als auch für die automatisierte Überwachung. Mehrere tarDie Get-Typen unterstützen verschiedene Analyseansätze, von der Echtzeitüberwachung mit ring_buffer bis 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.
- Entwickle eine Bibliothekrary von 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 Der Live-Datenbetrachter von Management Studio, Abfrage von Ereignisdateien mit sys.fn_xe_file_target_read_file oder Abfrage von Ringpufferdaten über DMVs.
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 ergänzen die Überwachung.tarInformationen werden den erfassten Ereignissen zugeordnet. 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: Was tarWelches Gets-Tool 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 aktiv ist.tarTed, überprüfe, ob die Prädikate nicht alle Ereignisse filtern, bestätige tarKonfiguration abrufen und Berechtigungen mithilfe von System-DMVs überprüfen.
F: Kann ich die Verwaltung erweiterter Ereignisse automatisieren?
A: Ja, verwenden SQL Server Agentenjobs zu starSitzungen stoppen, Ereignisdateien analysieren, Aufbewahrungsrichtlinien implementieren und auf erkannte Zustände reagieren.
Referenzen
- Schnell S.tart: Erweiterte Ereignisse in SQL Server – Microsoft Learn
- Erweiterte Ereignisübersicht – Microsoft Learn
- SQL Server Erweiterte Veranstaltungssitzungen – Microsoft Learn
- Tarerhält 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.

















