Jetzt teilen:
Inhaltsverzeichnis verstecken
8. Praktische Anwendungsfälle und Beispiele

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:

  1. Öffne SQL Server Management Studio und verbinden Sie sich mit Ihrem SQL Server Beispiel.
  2. Im Objekt-Explorer erweitern Verwaltung -> Erweiterte Ereignisse.
  3. Der Knoten „Erweiterte Ereignisse“ enthält Fachsitzungen und Pakete Ordner zur Verwaltung Ihrer Überwachungskonfigurationen.

Greifen Sie auf die Schnittstelle für erweiterte Ereignisse zu in SQL Server Management-Studio.

4.3 Eine neue Sitzung erstellen

So erstellen Sie eine neue Sitzung:

    1. Klicken Sie mit der rechten Maustaste auf Fachsitzungen Ordner unter Erweiterte Ereignisse.
    2. Wählen Sie Neue Sitzung Um den Konfigurationsdialog zu öffnen. Im Folgenden wird diese Methode verwendet, um eine neue Sitzung zu erstellen.

Erstellen Sie eine neue Sitzung mit erweiterten Ereignissen in SQL Server Management-Studio.

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:

  1. Geben Sie einen Sitzungsnamen ein im Sitzungsname Feld. Verwenden Sie beschreibende Namen, die den Überwachungszweck angeben.
  2. Optionale Auswahl Die Ereignissitzung wird beim Serverstart gestartet. um die automatische Sitzungsaktivierung zu ermöglichen.
  3. Die Standard-Sitzungsvorlage ist LeerSie können auch andere Vorlagen verwenden, wenn Sie eine vordefinierte Konfiguration nutzen.

Allgemeine Seite der Sitzung „Erweiterte Veranstaltungen“ in SQL Server Management-Studio.

4.3.2 Einrichtung der Veranstaltungsseite

Das VERANSTALTUNGEN Auf dieser Seite können Sie auswählen, welche Ereignisse überwacht werden sollen:

  1. Wähle aus VERANSTALTUNGEN Seite von links Wählen Sie eine Seite aus Panel.
  2. Bei VeranstaltungsbibliothekDurchsuchen Sie die verfügbaren Veranstaltungen oder nutzen Sie die Suchfunktion.
  3. Filtern Sie Ereignisse, indem Sie Schlüsselwörter wie „sql_statement_completed“ eingeben, um relevante Ereignisse zu finden.
  4. Wählen Sie das gewünschte Ereignis aus, z. B. sql_statement_completed.
  5. Klicken Sie auf den Pfeil nach rechts, um das Ereignis zu verschieben. Ausgewählte Veranstaltungen Liste.

Veranstaltungsseite der erweiterten Veranstaltungssitzung in SQL Server Management-Studio.

4.3.3 Datenspeicherkonfiguration

Das Datenspeicher Auf dieser Seite wird definiert, wo Ereignisdaten gespeichert werden:

  1. Wähle aus Datenspeicher Seite von links Wählen Sie eine Seite aus Panel.
  2. Bei Targets Bereich, wählen Sie einen Zieltyp aus dem Dropdown-Menü.

Datenspeicherseite der Sitzung „Erweiterte Ereignisse“ in SQL Server Management-Studio.

(1) Ziel der Ereignisdatei

Das Ziel event_file speichert Daten in Festplattendateien mit der Erweiterung .xel:

  1. Wählen Sie Ereignisdatei aus dem Dropdown-Menü „Zieltyp“.
  2. Geben Sie den Dateipfad an, z. B. C:\temp\YourSession_Target.xel.
  3. Konfigurieren Sie die Rollover-Optionen, um den Speicherplatz durch Festlegen der maximalen Dateigröße und Dateianzahl zu verwalten.
  4. Das Zielsystem schreibt kontinuierlich Ereignisse, bis die Sitzung beendet wird oder die Speichergrenzen erreicht sind.

Legen Sie in SSMS das Sitzungsziel auf event_file fest.

(2) Ringpuffer-Ziel

Das Ziel „ring_buffer“ speichert Ereignisse im Speicher, um einen schnellen Zugriff ohne Festplatten-E/A zu ermöglichen:

  1. Wählen Sie Ringpuffer als Zieltyp.
  2. Konfigurieren Sie die maximale Speicherzuweisung für den Puffer.
  3. Beachten Sie, dass ältere Ereignisse verworfen werden, sobald der Puffer voll ist. Daher eignet sich diese Methode zur Überwachung aktueller Aktivitäten.

Legen Sie das Ziel für die Sitzung „Erweiterte Ereignisse“ auf „ring_buffer“ fest. SQL Server Management-Studio.

(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.

Legen Sie das Ziel für die Sitzung „Erweiterte Ereignisse“ auf „event_counter“ fest. SQL Server Management-Studio.

(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.

Legen Sie das Ziel für die Sitzung „Erweiterte Ereignisse“ auf Histogramm fest. SQL Server Management-Studio.

(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.

Legen Sie in SSMS das Sitzungsziel auf pair_matching fest.

4.3.4 Erweiterte Einstellungen

Das Erweitert Die Seite bietet Konfigurationsoptionen auf Sitzungsebene:

  1. Wähle aus Erweitert Seite von links Wählen Sie eine Seite aus Panel.
  2. Einrichtung Ereignisaufbewahrungsmodus um zu steuern, wie Ereignisse unter Speicherdruck verarbeitet werden.
  3. Stelle den Maximale Dispatch-Latenz um Echtzeitverarbeitung und Systemleistung in Einklang zu bringen.
  4. Einrichtung Maximale Speichergröße und Maximale Ereignisgröße basierend auf Ihren Überwachungsanforderungen.
  5. Wählen Sie Speicherpartitionsmodus zur Optimierung für Umgebungen mit einem oder mehreren CPUs.

Erweiterte Seite der Sitzung in SQL Server Management-Studio.

4.4 Konfigurieren von Ereignisfiltern (Prädikaten)

Prädikate reduzieren das Datenvolumen, indem sie Ereignisse anhand spezifischer Kriterien filtern. So konfigurieren Sie Filter:

  1. Auf dem VERANSTALTUNGEN Wählen Sie auf der Seite das Ereignis aus, nach dem Sie filtern möchten, z. B. „sql_statement_completed“.
  2. Gehen Sie auf Einrichtung um den Dialog zur Ereigniskonfiguration zu öffnen.
    Konfigurieren Sie das Ereignis einer Sitzung mit erweiterten Ereignissen in SQL Server Management-Studio.
  3. Wähle aus Filter (Prädikat) Tab.
  4. Bei Feld Wählen Sie im Dropdown-Menü das Feld aus, nach dem gefiltert werden soll, z. B. die Dauer.
  5. Wählen Sie eine aus Operatorwie zum Beispiel „>“.
  6. Geben Sie den Filter ein Wertzum Beispiel 1000000 (1 Sekunde).
  7. Fügen Sie bei Bedarf weitere Bedingungen hinzu.

Konfigurieren Sie die Filter (Prädikate) für ein Ereignis.

4.5 Auswählen von Aktionen und Ereignisfeldern

Für jedes Ereignis können Sie die zu erfassenden Daten auswählen:

  1. 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“.
  2. Gehen Sie auf Einrichtung um den Dialog zur Ereigniskonfiguration zu öffnen.
  3. Wähle aus Globale Felder (Aktionen) Tab.
  4. Wählen Sie Aktionen aus, um zusätzliche Informationen wie Datenbankname oder Client-App-Name hinzuzufügen.
    Konfigurieren Sie die Aktionen eines Ereignisses.
  5. Überprüfen Sie die Ereignisfelder In diesem Abschnitt können Sie sehen, welche Felder automatisch erfasst werden.
  6. Löschen Sie alle unnötigen Felder, um das Datenvolumen zu reduzieren.
    Konfigurieren Sie die Felder eines Ereignisses.

4.6 Sitzungen starten und verwalten

Nachdem Sie Ihre Sitzung konfiguriert haben, können Sie sie starten und ihren Betrieb überwachen:

  1. Gehen Sie auf OK um die Sitzung zu erstellen.
  2. Erweitern Sie im Objekt-Explorer die Fachsitzungen Ordner, um Ihre neue Sitzung anzuzeigen.
  3. Klicken Sie mit der rechten Maustaste auf den Sitzungsnamen und wählen Sie aus Sitzung starten um mit der Ereigniserfassung zu beginnen.
    Starten Sie eine Sitzung für erweiterte Ereignisse in SQL Server Management-Studio.
  4. Um Live-Daten anzuzeigen, klicken Sie mit der rechten Maustaste auf die Sitzung und wählen Sie aus Live-Daten ansehen.
    Sehen Sie sich die Live-Daten einer Extended Events-Sitzung an in SQL Server Management-Studio.
  5. 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:

  1. Im Objekt-Explorer erweitern Verwaltung -> Erweiterte Ereignisse -> Fachsitzungen.
  2. Klicken Sie mit der rechten Maustaste auf Ihre aktive Sitzung.
  3. Wählen Sie Live-Daten ansehen Um den Live-Daten-Viewer zu öffnen.
    Sehen Sie sich die Live-Daten einer Extended Events-Sitzung an in SQL Server Management-Studio.
  4. Die Ereignisse werden im Raster angezeigt, sobald sie eintreten.
  5. Klicken Sie auf einzelne Ereignisse, um detaillierte Feldwerte im Detailbereich anzuzeigen.
    Verfolgen Sie die Live-Daten der Ereignisse, einschließlich der Veranstaltungsdetails.
  6. 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:

  1. Einrichtung SQL Server Agentenauftrag zum regelmäßigen Abfragen der Ereignisdatei zur Korruptionsüberwachung.
  2. Wenn Beschädigungsereignisse gefunden werden, führen Sie DBCC CHECKDB auf der betroffenen Datenbank aus.
  3. Senden Sie E-Mail-Benachrichtigungen an Datenbankadministratoren mit Ereignisdetails und DBCC CHECKDB-Ergebnissen.
  4. 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:

  1. Überprüfen Sie, ob die Sitzung mit sys.dm_xe_sessions gestartet wurde.
  2. Überprüfen Sie die Prädikate, um sicherzustellen, dass sie nicht alle Ereignisse herausfiltern.
  3. Bestätigen Sie, dass Ereignisse ausgelöst werden, indem Sie Filter vorübergehend entfernen.
  4. Überprüfen Sie die Berechtigungen, um sicherzustellen, dass Sie Zugriff auf die Sitzungsdaten haben.
  5. 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:

  1. Fügen Sie Prädikate hinzu, um das Ereignisvolumen zu reduzieren.
  2. Entfernen Sie unnötige Aktionen, die zusätzliche Daten erfassen.
  3. Erhöhen Sie MAX_DISPATCH_LATENCY, um die Schreibfrequenz zu reduzieren.
  4. Ändern Sie EVENT_RETENTION_MODE in ALLOW_SINGLE_EVENT_LOSS.
  5. 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:

  1. Überprüfen Sie die SQL Server Das Dienstkonto besitzt Schreibberechtigungen für das Zielverzeichnis.
  2. Stellen Sie sicher, dass ausreichend Speicherplatz vorhanden ist.
  3. Prüfen Sie, ob der angegebene Pfad existiert und erreichbar ist.
  4. Ü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:

  1. Klicken Sie im Dialogfeld „Neue Sitzung“ auf die Schaltfläche Template Dropdown-Liste.
  2. Wählen Sie aus verfügbaren Vorlagen wie Abfragedetailverfolgung oder Systemzustand.
  3. 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


Ü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.

Jetzt teilen: