Ihr Standort: movisco // Blog »
kontakt mail icon
kontakt phone icon

5 Tipps zur Performanzverbesserung von SQLScript für SAP HANA

An welchen Stellschrauben Entwickler drehen können, um verbesserte Ergebnisse zu erhalten

In unserer laufenden Serie im movisco Blog rund um die Themen AMDP und SQLScript für SAP HANA haben wir bereits allgemeine Vorteile und einige spezielle Einsatzszenarien für diese Technologien vorgestellt.

Die Programmiersprache SQLScript für SAP HANA erweitert den SQL-Standard um verschiedene logische Container (wie z.B. Prozeduren, Funktionen und anonyme Blöcke), deklarative Logik und imperative Logik. Letztere ist dazu da, um in einem Programm Kontrollstrukturen (bedingte Anweisungen, Verzweigungen, Schleifen usw.) zur Verfügung zu haben. Grundsätzlich lassen sich mit Hilfe von deklarativer Logik sehr komplexe und dennoch schnelle Datenbankabfragen konstruieren. Ein Optimizer sorgt im Hintergrund dafür, dass ein schneller Lösungsweg vom System ermittelt wird. Die Aufgabe des Entwicklers beschränkt sich daher im Wesentlichen auf eine richtige Beschreibung des Ergebnisses.

Gleichwohl hat dennoch auch in diesem Fall der Entwickler einen gewissen Einfluss auf die Verarbeitungszeit der Abfragen. Doch wie lässt sich die Performanz der Abfragen beeinflussen und steigern?

Dr. Robert Nabiullin, praxiserfahrener Consultant bei der movisco AG, gibt nachfolgend hilfreiche Tipps und Empfehlungen (die Reihenfolge der Tuningmöglichkeiten steht nicht im Zusammenhang mit deren Auswirken auf die Performanz).

Tipp 1: Datenmenge reduzieren

Das betrifft sowohl die Anzahl der Spalten als auch die Anzahl der Datensätze. Das Allokieren von Hauptspeicher im Hintergrund ist kostenintensiv und verschlechtert die Laufzeit. Wenn diese für nicht benötigte Daten geopfert wird, ist dies oft ein vermeidbarer Fehler. Grundsätzlich sollten bei Zugriffen auf Tabellen (und Tabellenvariablen) nur die benötigten Spalten selektiert werden. Zudem ist eine Prüfung sinnvoll, ob ein SELECT auf einen JOIN nicht lediglich eine Projektion ist und damit gewisse Redundanzen erzeugt.

Bei der Anzahl der Datensätze lohnt es sich, diese so früh wie möglich zu reduzieren. Bei arithmetischen Operationen über Spalten kann z. B. geprüft werden, ob die Tabelle nicht auf die relevanten Einträge reduziert werden kann (etwa laufende Summen bei Tabellen mit vielen Nullen), zum Beispiel durch Voraggregieren und anschließend über einen geeigneten JOIN auf die gewünschte Form bringen.

Tipp 2: Imperative Anweisungen vermeiden

Eine der wesentlichen Stärken der HANA-Datenbank ist die Fähigkeit zu einer parallelen Query-Ausführung. So werden beispielsweise mehrere Abfragen in einem SQLScript gleichzeitig ausgeführt, sofern sie voneinander unabhängig sind. Diesen Prozess kann man als Entwickler unterstützen, indem auf imperative Anweisungen verzichtet wird. Diese werden nicht von SAP HANA optimiert und können daher die Laufzeit negativ beinträchtigen. Stattdessen sollte geprüft werden, ob diese Anweisungen nicht durch deklarative Anweisungen ersetzt werden können (was leider nicht immer, jedoch häufiger als man denkt, möglich ist).

Tipp 3: Eine Vermischung der beteiligten Engines vermeiden

Grob gesagt werden auf der HANA-Datenbank verschiedene Aufgaben von unterschiedlichen sogenannten Engines ausgeführt, die wiederum auf bestimmte Teilaufgaben spezialisiert sind. Bei einer zeilenweisen Verarbeitung kommt die Row Engine zum Einsatz. Bei einer Ausführung von Calculation Views wird die Calculation Engine benötigt. Eine gleichzeitige Verwendung von SQL-Anweisungen und CE-Funktionen (Calculation Engine Functions) ist daher zu vermeiden, weil diese verschiedene Optimizer benutzen. Ebenso ist es problematisch, wenn in einer Abfrage gleichzeitig Row-Store- und Column-Store-Tabellen verwendet werden, was zum Beispiel beim Einsatz von Window Functions passiert.

Tipp 4: Mengenoperationen vermeiden

Die Standardmengenoperationen wie UNION, UNION ALL, INTERSECT und EXCEPT werden nicht von der Column-Engine verarbeitet. Daher kann die Abfrage-Laufzeit verbessert werden, wenn man diese Operationen vermeidet. Leider gibt es keine allgemeingültige Umformulierung, weil sie davon abhängen, ob die betreffenden Spalten auch Null-Werte enthalten. Wenn das nicht der Fall ist, entspricht etwa der INTERSECT von zwei Tabellen einer JOIN-Bedingung:

SELECT spalte_a FROM tab_1

INTERSECT

SELECT spalte_a FROM tab_2;

Liefert das gleiche Ergebnis wie die folgende Anweisung:

SELECT DISTINCT tab_1.spalte_a FROM tab_1

JOIN tab_2 ON tab_1.spalte_a = tab_2.spalte_a;

UNION ALL im Allgemeinen ist schneller als UNION, weil dort kein Vergleich auf Duplikate gemacht wird. Wenn also bekannt ist, dass es in den Tabellen keine Duplikate geben kann (z.B. Buchungen über verschiedene Perioden) oder Duplikate akzeptabel sind, sollte UNION ALL dem UNION vorgezogen werden.

Tipp 5: Dynamisches SQL vermeiden

Dynamisches SQL erlaubt die Definition und Ausführung von SQL-Anweisungen zur Laufzeit.

Zunächst lassen sich daraus durchaus Vorteile erkennen, wie etwa die Nutzung dynamischer Filter oder die Ausführung von SQL-Anweisungen, die der Prozedur als String übergeben werden. Doch wo ein Vorteil ist, findet sich auch immer ein Nachteil, bzw. in diesem Fall auch mehrere Nachteile:

Bei jeder Ausführung muss der Optimizer neu bemüht werden. Dies hat zur Konsequenz, dass sich die Ausführung verlangsamt.

Darüber hinaus muss bedacht werden, dass diese Option Möglichkeiten wie unautorisierte Abfragen und SQL-Injection, also das Einschleusen von Datenbankbefehlen, die Daten unberechtigt lesen, ändern oder löschen, eine Hintertüre öffnet und somit zu einem Sicherheitsrisiko werden kann.

Neugierig geworden?

Dr. Robert Nabiullin hat Sie in diesem Beitrag mitgenommen auf einen Abstecher in die Welt von SQLScript für SAP HANA inklusive Tipps zur Performanzverbesserung. Die 5 beschriebenen Tipps stellen nur einen kleinen Auszug an Möglichkeiten dar, an welchen Stellschrauben Sie drehen können, um die Performanz bei Abfragen zu steigern.

Möchten Sie Ihren Werkzeugkoffer mit weiteren Tipps und Tricks von den erfahrenen Beratern der movisco AG füllen oder möchten Sie mehr über Möglichkeiten der HANA-Datenbank und Entwicklung von Transformationen in SAP Business Warehouse in SQLScript erfahren?

Kontaktieren Sie uns direkt telefonisch oder auch per E-Mail. Wir freuen uns auf Ihre Fragen!


Ihre Ansprechpartnerin

Susanne Jung

info@movisco.com
elektronische Visitenkarte

Fon +49 40 767 53 777

Schnellkontakt-Formular

Die abgesendeten Daten werden nur zum Zweck der Bearbeitung Ihres Anliegens verarbeitet. Weitere Informationen finden Sie in unserer Datenschutzerklärung.

Datenschutz bestätigt?

Sie haben Fragen?

Wir freuen uns über Ihre direkte Kontaktaufnahme!

  • Telefon: +49 40 767 53 777
  • E-Mail