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 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:

  1. Öffne SQL Server Management Studio und verbinden Sie sich mit Ihrem SQL Server Beispiel.
  2. Im Objekt-Explorer erweitern Management -> Erweiterte Ereignisse.
  3. Der Knoten „Erweiterte Ereignisse“ enthält Fachsitzungen und Angebote 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 Start die Ereignissitzung auf Server starTUP 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

Die 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 EreignisbibliothekraryDurchsuchen 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

Die 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 Tarbekommt Bereich, wählen Sie einen tarWählen Sie den Typ aus der Dropdown-Liste aus.

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

(1) Ereignisdatei Tarbekommen

Die Ereignisdatei target speichert Daten in Dateien mit der Erweiterung .xel auf der Festplatte:

  1. Wählen Sie Ereignisdatei von der tarDropdown-Menü „Typ abrufen“ öffnen.
  2. Geben Sie den Dateipfad an, z. B. C:\temp\IhreSitzung_Target.xel.
  3. Konfigurieren Sie die Rollover-Optionen, um den Speicherplatz durch Festlegen der maximalen Dateigröße und Dateianzahl zu verwalten.
  4. Die tarSchreibvorgänge werden kontinuierlich abgerufen, bis die Sitzung beendet wird oder die Speichergrenzen erreicht sind.

Sitzung einrichten tarAuf die Ereignisdatei in SSMS zugreifen

(2) Ringpuffer Tarbekommen

Der Ringpuffer target speichert Ereignisse im Arbeitsspeicher für den schnellen Zugriff ohne Festplattenzugriff:

  1. Wählen Sie Ringpuffer wie die tarDatentyp abrufen.
  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.

Setze die tarZugriff auf den Ringpuffer für die Sitzung „Erweiterte Ereignisse“ in SQL Server Management-Studio.

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

Setze die tarRufe den Ereigniszähler für die Sitzung „Erweiterte Ereignisse“ ab. SQL Server Management-Studio.

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

Setze die tarRufen Sie das Histogramm für die Sitzung „Erweiterte Ereignisse“ auf in SQL Server Management-Studio.

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

Sitzung einrichten tarAuf pair_matching in SSMS zugreifen

4.3.4 Erweiterte Einstellungen

Die 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 Ergänzungen hinzuzufügentary-Informationen, wie z. B. Datenbankname oder Client-App-Name.
    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 StarSitzungen verwalten und verwalten

Nach der Konfiguration Ihrer Sitzung können Sie start es und überwachen Sie seinen Betrieb:

  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 Start-Sitzung um mit der Ereigniserfassung zu beginnen.
    Start eine Extended Events-Sitzung 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 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:

  1. Im Objekt-Explorer erweitern Management -> 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_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:

  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.

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:

  1. Überprüfen Sie, ob die Sitzung aktiv ist.tarted using sys.dm_xe_sessions.
  2. Überprüfen Sie die Prädikate, um sicherzustellen, dass sie nicht alle Ereignisse herausfiltern.
  3. Bestätigen Sie, dass Ereignisse gemäß Tempo ausgelöst werden.rarily Filter entfernen.
  4. Überprüfen Sie die Berechtigungen, um sicherzustellen, dass Sie Zugriff auf die Sitzungsdaten haben.
  5. 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:

  1. Fügen Sie Prädikate hinzu, um das Ereignisvolumen zu reduzieren.
  2. Entfernen Sie unnötige Aktionen, die zusätzliche Kosten verursachen.tary-Daten.
  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-Datei TarProbleme erhalten

Reichen Sie das tarDie Probleme hängen oft mit Berechtigungen oder Speicherplatz zusammen:

  1. Überprüfen Sie die SQL Server Das Dienstkonto hat Schreibberechtigungen für die tarVerzeichnis abrufen.
  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 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


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