Cubes müssen häufig überwacht werden, da ihre Produktivität häufig abnimmt (Verlangsamung während der Abfrageerstellung, Erhöhung der Verarbeitungszeit). Um den Grund für die Abnahme herauszufinden, müssen wir unser System überwachen. Dazu verwenden wir den SQL Server Profiler. Microsoft plant jedoch, dieses SQL-Tracing-Tool in nachfolgenden Versionen auszuschließen. Der Hauptnachteil des Tools ist die Ressourcenintensität, und es sollte auf einem Produktionsserver mit Vorsicht ausgeführt werden, da es zu einem kritischen Verlust der Systemproduktivität führen kann.
Somit ist Extended Events ein allgemeines Event-Handling-System für Serversysteme. Dieses System unterstützt die Korrelation von Daten von SQL Server, wodurch SQL Server-Statusereignisse abgerufen werden können.
Die Systemarchitektur ist unten dargestellt:
Tatsächlich haben wir ein Paket, das Ereignisse, Ziele, Aktionen, Typen, Prädikate und Karten enthält. Sitzungen, die Ereignisse, Ziele und Aktionen enthalten, werden auf dem Server ausgeführt. Ich werde die Architektur nicht im Detail beschreiben, da die Hilfe eine explizite Beschreibung enthält.
Kehren wir nun zu unserem SSAS zurück. Um alles anschaulicher zu machen, betrachten wir einige Szenarien, die wir für die Problemanalyse verwenden.
Erstes Szenario:Cube-Verarbeitungsanalyse (mehrdimensionaler Cube)
Häufig kommt es vor, dass ein Cube sehr lange während der Verarbeitung aktualisiert wird, obwohl das Datenvolumen recht gering ist. Um den Grund herauszufinden, müssen wir verstehen, welche Abfrage oder welcher Ort der Verarbeitung die Verlangsamung verursacht. Natürlich können wir die Verarbeitung in der Produktion ausführen und sehen, was vor sich geht, aber ich bin mir nicht sicher, ob Ihre Benutzer das zu schätzen wissen. Hier kommt Extended Events zu Hilfe. Lassen Sie uns unsere Sitzung ausführen und das Speichern in einer Datei konfigurieren.
Lassen Sie uns SSMS öffnen und eine Verbindung zu SSAS herstellen und dann zur Verwaltung wechseln.
Lassen Sie uns nun eine neue Sitzung erstellen:
- Geben Sie auf der Registerkarte "Allgemein" einen Namen für unsere Sitzung an und laden Sie eine Vorlage.
- Die Ereignisse Registerkarte zeigt die Ereignisse, die uns helfen, die Probleme zu analysieren. Die Registerkarte enthält alle unsere alten Freunde von Profiler. Wählen wir die folgenden Ereignisse für die Verarbeitungsanalyse aus:CommandBegin , CommandEnd, Programm essReportBegin und ProgressReportEnd, ResourseUsage.
BefehlBeginn , CommandEnd zeigt den Beginn und das Ende der Befehlsausführung während der Verarbeitung.
Programm essReportBegin und ProgressReportEn bieten erweiterte Informationen über die Länge jedes Ereignisses und zeigen gelesene Daten, Ausführung von SQL-Abfragen, Länge usw.
Ressourcennutzung zeigt die Anzahl der Ressourcen, die für die Ausführung einer Abfrage, einer Aktion aufgewendet wurden.
Wenn wir die Ereignisse ausgewählt haben, können wir zur Konfiguration jedes Ereignisses wechseln und angeben, welche Ereignisse angezeigt und welche ausgeblendet werden müssen (zum Beispiel können wir die Prozess-ID ausblenden).
- Datenspeicherung Tab. Hier können wir angeben, ob Ereignisse im Echtzeitmodus angezeigt oder in eine Datei geschrieben werden sollen:
- event_file – Speichern des Ereignisses in einer Datei zur weiteren Analyse. Geben Sie die maximale Dateigröße und den Zielpfad an. Wenn die Dateigröße die angegebene Größe überschreitet, wird eine neue Datei erstellt. Außerdem können wir die Anzahl der Dateien angeben, die erstellt werden müssen (maximale Anzahl Dateien).
- event_stream – ermöglicht die Anzeige von Ereignissen im Echtzeitmodus.
- ring_buffer – gibt an, dass die Sitzungsdaten im Arbeitsspeicher gespeichert werden müssen, solange der Server läuft. Beim Neuladen werden Daten gelöscht.
- Der Fortgeschrittene Registerkarte ermöglicht die Konfiguration von Ressourcen (Speicher, Prozessor) für eine bestimmte Sitzung.
Klicken Sie abschließend auf OK und erhalten Sie die Sitzung. Lassen Sie uns die Cube-Verarbeitung ausführen und die Verarbeitung nach Ereignissen sehen. Wechseln Sie in den Live-Datenmodus.
Oben im folgenden Screenshot sehen wir die Ereignisse, die gerade mit unserer Instanz stattfinden. Details zu den Ereignissen werden unten angezeigt. Jeder Wert der Ereignisdetails kann oben als separate Spalte hinzugefügt werden. Klicken Sie mit der rechten Maustaste auf einen ausgewählten Wert der Ereignisdetails und zeigen Sie ihn in einer Tabelle an.
Als Ergebnis erhalten wir folgende Ansicht:
Daher ermöglichen erweiterte Ereignisse die Analyse unserer Verarbeitung im Echtzeitmodus. Wir können nachvollziehen, wie viel Zeit für die Verarbeitung jedes Objekts aufgewendet wird, wie viele Ressourcen dafür verwendet werden. Dies hilft, Rückschlüsse zu ziehen und Schwachstellen zu finden. Außerdem überlasten wir das System nicht und haben keinen Produktivitätsverlust.
Sie können eine Sitzung auch über XMLA erstellen. Sie können das Skript auf GitHub abrufen.
Das Beenden und Löschen einer Sitzung ist sowohl über SSMS als auch über XMLA möglich.
- Über SSMS (2016 tritt der Fehler jedoch auf und ich konnte die Sitzung nicht über die Schnittstelle löschen).
- XMLA-Skript – kann hier heruntergeladen werden.
Dies ist der erste Teil des Artikels über erweiterte Ereignisse für SSAS. Im zweiten Teil betrachten wir ein Szenario der Analyse der Abfrageproduktivität im Cube, das Arbeiten mit Ablaufverfolgungsdateien und das Analysieren der Datei über Power BI.
Ich empfehle auch, einen Blick auf die folgenden Blog-Beiträge zu werfen:
- Pinal Dave – SQL SERVER – SQL Profiler vs. erweiterte Ereignisse
- Chris Web – Profiler, erweiterte Ereignisse und Analysedienste. Der Autor des Artikels gibt zwar an, dass Profiler auf Produktionsservern fast nicht verwendet wird, bestätigt jedoch seine Probleme mit der Serverlast.
- Brent Ozar – Erweiterte SQL Server-Ereignisse