In unserem ersten Beitrag, Performance Analyse und Optimierung von SAP SQL, haben wir verschiedene Ansätze zur Performance Analyse von SQLScript vorgestellt. Während der EXPLAIN PLAN Befehl schon erste Anhaltspunkte bieten kann, gibt es meiner Meinung nach ein viel besseres Tool zur Performanceanalyse - PlanViz. Dieses stellt den Ausführungsplan in einem grafischen Editor dar.
Die grafische Oberfläche erleichtert die Analyse erheblich, besonders bei sehr großen Abfragen, die mehrere Schritte umfassen. PlanViz erlaubt es Ihnen, langwierige Schritte auf den ersten Blick zu identifizieren. Darüber hinaus können Sie prüfen, wie viele Daten verarbeitet werden und sehen, ob die Verarbeitung parallel abläuft. Anhand der gebotenen Informationen können Sie auch sehen, ob nur die tatsächlich benötigten Tabellen gelesen werden oder ob zu viele Datensätze selektiert werden.
Unsere Blogreihe "SQLScript Performance Analyse" im Überblick
|
Sie können PlanViz in Eclipse über einen Rechtsklick auf den Code öffnen. Selektieren Sie dazu im Kontextmenü den Eintrag Visualize Plan → Execute.
Nun wechselt Eclipse zu der PlanViz Perspektive. Zuerst wird eine Übersicht mit der Ausführungszeit, den wichtigsten Operatoren sowie dem Datenfluss angezeigt.
Um mehr Details zu einem Operator zu erhalten, können Sie ihn anklicken. Unter Number of Tables Used können Sie sehen, wie viele Tabellen insgesamt gelesen werden. Wenn Sie auf die Zahl klicken, sehen Sie die verwendeten Tabellen sowie die Anzahl der gelesenen Einträge.
Unter dem Menüeintrag Executed Plan sehen Sie eine grafische Darstellung des Ausführungsplans. Jeder Knoten stellt eine Operation dar und die Pfeile zeigen den Datenfluss zwischen den Operationen. Für jeden Knoten werden zwei Ausführungszeiten angezeigt: inklusive sowie exklusive Zeit. Die inklusive Zeit entspricht der Ausführungszeit des gesamten Knotens. Die exklusive Zeit dagegen zeigt nur die Laufzeit der jeweiligen Operation.
Dabei können Sie Details zu den jeweiligen Knoten über das Dreieck auf- bzw. zuklappen. Im zugeklappten Zustand entspricht die angezeigte Laufzeit der Summe der darunterliegenden Knoten. Im aufgeklappten Zustand können Sie weitere Informationen einsehen. So können Sie zum Beispiel sehen, dass bei einem Wechsel zwischen den verschiedenen Engines das Ergebnis materialisiert wird. Da dies zusätzliche Ressourcen erfordert, sollte dieser Schritt nach Möglichkeit vermieden werden.
Darüber hinaus können Sie sich den kritischen Pfad anzeigen lassen. Die Operatoren, die auf dem kritischen Pfad liegen, kommen für Performanceoptimierung vorrangig in Betracht. Optimierungen, die abseits des kritischen Pfades liegen, haben keine Auswirkung auf die Gesamtperformance und sind daher zweitrangig.
Allerdings kann die Darstellung des Datenflusses gerade bei komplexeren SQL Abfragen schnell unübersichtlich werden. Zwecks besserer Analyse bietet PlanViz auch Informationen im Tabellenformat, die sich im unteren Bereich des Tools befinden: Timeline, Operator List, Tables Used sowie Performance Trace. Nachfolgend stellen wir diese Sichten detaillierter vor.
Die Timeline Sicht bietet eine vollständige Übersicht über den Ausführungsplan, bei dem die einzelnen Operationen auf eine Zeitachse gelegt werden. So können Sie auf den ersten Blick erkennen, ob und welche Operationen sequentiell statt parallel verarbeitet werden. Darüber hinaus können Sie weitere Ursachen für langlaufende Abfragen finden, indem Sie Operationen identifizieren, die die meiste Laufzeit beanspruchen und mit Ihren Erwartungen abgleichen.
Die Sicht bietet folgende Informationen. Auf der X-Achse wird die seit der Ausführung der Abfrage verstrichene Zeit angezeigt. Die Y-Achse stellt eine Liste der ausgeführten Operationen dar. Die Dauer der Ausführung wird in Form eines Gantt-Diagramms dargestellt. Darüber hinaus sehen Sie die Art jedes Zeitstempels, zum Beispiel, ob es sich um einen Öffen- (open), Schließen- (close) oder Abrufen-Schritt (fetch) handelt.
Wenn Sie Lücken oder mehrfaches Vorkommen von Öffnen- (open) bzw. Abrufen-Statements (fetch) in der Zeilen-Engine entdecken, deutet das darauf hin, dass zwischenzeitlich eine andere Operation von der Spalten-Engine aufgerufen wurde. Wie Sie bereits in unserem Beitrag "Tipps für SQLScript Performance" gelernt haben, wirkt sich ein Wechsel zwischen den Engines negativ auf die Performance aus, da die Ergebnisse materialisiert werden müssen.
Die Sicht “Operator List” bietet erweiterte Einblicke zu allen Operatoren des Ausführungsplans. Dabei bietet diese Sicht wesentlich mehr Details als die EXPLAIN FOR Funktionalität, die wir im Artikel Performance Analyse und Optimierung von SAP SQL vorgestellt haben.
Besonders nützlich ist die Möglichkeit, die dargebotenen Daten nach bestimmten Kriterien zu filtern. So können Sie zum Beispiel unter der Spalte CP (critial path) sehen, ob der Operator auf dem kritischen Pfad liegt. Mithilfe eines Filters auf den kritischen Pfad können Sie Ihre Analyse auf die wichtigsten Operatoren konzentrieren.
Darüber hinaus können Sie den Filter nutzen, um alle Operatoren anzuzeigen, die eine bestimmte Anzahl von Zeilen verarbeiten. Alternativ können Sie sich nur die Operationen mit langer Laufzeit anschauen, indem Sie den Filter für die Ausführungszeit nutzen.
So können Sie Ihre Analyse auf das Wesentliche richten. Über einen Doppelklick auf einen Eintrag springen Sie zu diesem Operator in der grafischen Darstellung.
Diese Sicht gibt einen Überblick über die Tabellen, die während der Verarbeitung Ihrer SQL Abfrage verwendet wurden. Pro Tabelle werden drei Kennzahlen angezeigt: maximale Anzahl verarbeiteter Einträge, Anzahl der Zugriffe sowie die maximale Verarbeitungszeit. Sie können den Inhalt aufsteigend bzw. absteigend sortieren, um Ausreißer schneller identifizieren zu können.
Hier können Sie auf einen Blick erkennen, ob die verarbeiteten Tabellen und die Anzahl der Einträge sinnvoll sind. Falls Sie zum Beispiel eine Tabelle entdecken, die aus der Business Sicht nicht benötigt wird, können Sie Ihre SQL Logik so anpassen, dass kein Zugriff auf die Tabelle erfolgt. Darüber hinaus können Sie einen Blick auf die Anzahl der verarbeiteten Einträge werfen. Falls die Anzahl der Einträge höher als erwartet ausfällt, prüfen Sie, ob die Filterung in der SQL Abfrage verbessert werden kann.
Wenn Sie auf eine Zeile doppelklicken, springen Sie zu der Ansicht Operator List, wobei auf die jeweilige Tabelle gefiltert wird. So sehen Sie alle Operatoren, die mit dieser Tabelle arbeiten.
Wie der Name bereits vermuten lässt, dient diese View der Performance Analyse. Es wird eine Liste der Operatoren mit der jeweiligen Laufzeit und Anzahl der verarbeiteten Zeilen dargestellt. Diese Sicht besteht aus zwei Bereichen. Links sehen Sie eine Liste von Operatoren, die Sie auswählen können. Rechts werden die Performance-Trace-Daten für den ausgewählten Operator angezeigt.
Diese Sicht ist vor allem auf fortgeschrittene Benutzer ausgerichtet, die mit den Details von SAP HANA gut vertraut sind. Sie können diese Ansicht nutzen, um zusätzliche Informationen für einen bestimmten Operator anzuzeigen, die in anderen Ansichten nicht verfügbar sind. Indem Sie sich die sequentielle Liste der Aktivitäten anschauen, können Sie eventuell die Lücken in der Timeline Sicht füllen. Darüber hinaus können Sie sich die Detail von der Engine Ausführung ansehen.
In der Netzwerkansicht können Sie die Datenübertragungen zwischen verschiedenen Servern in Ihrem Netzwerk einsehen. Sie können diese Ansicht nutzen, um eventuelle Probleme Ihrer verteilten Umgebung zu erkennen.
Wenn Sie zum Beispiel feststellen, dass eine bestimmte Datenübertragung ungewöhnlich viel Zeit in Anspruch nimmt, können Sie die Datengröße sowie das Netzwerk überprüfen. Wenn Sie feststellen, dass zwischen einer bestimmten Gruppe von Servern häufige Datenübertragungen stattfinden, können Sie das Set-up verbessern.
Wir hoffen, dass Sie ein grundlegendes Verständnis von der Funktionsweise des PlanViz gewinnen konnten. Es handelt sich um ein sehr mächtiges Werkzeug, mit dem Sie verschiedene Performance Aspekte Ihrer SQL Abfragen analysieren können.
Haben Sie Fragen zu SAP HANA SQLScript? Versuchen Sie das nötige Know-How in Ihrer Abteilung aufzubauen oder benötigen Sie Unterstützung bei einer konkreten Fragestellung? Wir helfen Ihnen gerne dabei. Fordern Sie noch heute ein unverbindliches Beratungsangebot an!