Sie verwenden keine aktuelle Browser-Version. Deshalb wird die Webseite möglicherweise nicht korrekt dargestellt. Hier finden Sie weitere Hinweise.

SQL Hints in CalculationViews

Inhaltsverzeichnis

Ein Überblick über die Nutzung von SQL Hints in CalculationViews

SQL Hints bieten bei Abfragen auf der HANA Datenbank mächtige Möglichkeiten. Auch bei den CalculationViews können Hints gesetzt werden. Grund genug also, diese Option einmal näher zu betrachten.

Die SQL Hints sind im normalen Alltag eines Entwicklers im SAP BW/4HANA eher selten. Ein Kontakt mit diesem Thema kommt oft erst bei komplexen Fragestellungen oder über OSS-Hinweise zustande. Dann allerdings können sie mächtige Werkzeuge sein. Werden graphische Calculation Views genutzt und schaut man sich deren Einstellungen im Detail genauer an, sieht man, dass auch für diese CalculationViews die Option besteht, SQL Hints zu setzen. Dieser Blog wird diese Möglichkeit genauer betrachten.

Dokumentationen zu SQL Hints

Die SAP-Dokumentation von SQL Hints ist nicht unbedingt als ausführlich zu bezeichnen. Die Suche in der Dokumentation und im Internet bringt nur sehr wenige Quellen zu Tage.
Im System selbst liefert die Tabelle HINTS die im System möglichen Hints – über das einfache Statement SELECT * FROM hints.
Die Hauptquelle ist eine Auflistung der Hints in der Dokumentation „SAP HANA SQL and System Views Reference“. Hier werden die Hints zwar alle aufgeführt, jedoch werden diese nur sehr kurz und kaum ausführlicher als in ihrer Definition beschrieben. Genauere Voraussetzungen und eine detaillierte Beschreibung der Wirkungsweise fehlen.
Im „SAP HANA Performance Guide for Developers“ werden SQL Hints ebenfalls erwähnt. Dabei geht es im Kapitel zur SQL Query Performance nicht ausschließlich um die Hints, sondern auch um andere Aspekte der Performance Optimierung. Allerdings werden hier einige Kategorien von Hints etwas detaillierter erläutert.
Bei den OSS Hinweisen ist der OSS Hinweis 2142945 – FAQ: SAP HANA Hints der ausführlichste. Dieser geht auch auf den Typ Hints für die CalculationViews ein. Diese werden im OSS Hinweis 2509161 nochmal genauer beschrieben. Auch der OSS Hinweis 3019087 beschreibt das Setzen von Hints (nicht nur in CalculationViews). Dieser Hinweis wird auch im SAP Dokument „SAP HANA Troubleshooting and Performance Analysis Guide“ öfter erwähnt. Aber auch in etlichen anderen OSS Hinweisen werden Hints angesprochen.

SQL Hints in einem CalculationView

Um die Anwendungen an einem Beispiel konkreter zu machen, wurde folgendes kleines Beispielszenario aufgebaut.

Die Verkaufsbelege sind in einer Tabelle für die Köpfe und einer Tabelle für die Positionen abgelegt. Diese werden über einen Join (Join_Doc) zusammengeführt. Über den Kunden aus der Kopf-Tabelle werden in einem weiteren Join (Join_Cust_Doc) dann weitere Kundenattribute wie bspw. die Verkaufsorganisation verfügbar gemacht. Das hauptsächliche Auswertungsszenario ist eine Auswertung über die Verkaufsbelege einer Verkaufsorganisation. Eine Auswertung mit PlanViz ergab, dass der Join über die Verkaufsbelege und die folgenden Group und Order by Operationen die dominierenden Operationen sind. Da aber i.d.R. auf eine Verkaufsorganisation eingeschränkt wird (und damit nur auf einen Teil der Kunden mit Verkaufsbelegen) wird die eigentlich benötigte Menge an Datensätzen im Join_Cust_Doc wieder reduziert. Die Idee ist, die Anzahl der Datensätze aus der DOC_Header Tabelle über das Merkmal Kunden (Customer) bereits unten vor dem Join (Join_Doc) durch einen Hint zu reduzieren.

Abbildung 1: Überblick über den Beispiel CalculationView

Die Reduktion soll mittels eines Hints erfolgen, der die Filterung aus dem oberen Join in den unteren Join der Belegtabellen drückt. Da, wie bereits beschrieben, in der Dokumentation zu den Hints wenig mehr als der Name steht, wurden zwei von der Bezeichnung her interessante Hints ins Auge gefasst: JOIN_THRU_AGGR und JOIN_THRU_JOIN.

In einem CalculationView können die Hints im Tab View Properties des Semantic Knotens eingegeben werden.

Abbildung 2: Der CalculationView ohne Hint

Dabei sind die möglichen Werte in den Feldern Name und Value zu beachten. Nicht nur, dass hier nur bestimmte Namen und Werte eingetragen werden können, sie sind auch noch case-sensitive einzugeben. Der OSS Hinweis 2509161 beschreibt dies im Detail.

In einer Kopie wird nun ein Hint eingegeben und getestet.

Abbildung 3: Der CalculationView mit dem Hint JOIN_THRU_JOIN

Die Tests umfassen neben den Laufzeiten auch die Ergebnisse – wie in der Warnung angesprochen.

Bei den Resultaten sind hier keine Abweichungen festzustellen. Die Laufzeiten unterscheiden sich wenig von denen des CalculationViews ohne einen Hint. Das kann aber auch an dem Testszenario liegen, welches nur aus sehr wenigen Datensätzen besteht. Die Analyse des Ausführungsplans über PlanViz zeigt nicht die gewünschte Änderung bei der Anzahl der Datensätze aus den Belegtabellen. Auch die Reihenfolge der Operationen unterscheidet sich im Detail. So wird in dem CalculationView mit Hint das Group by vor dem Join mit den Salesorg-Daten ausgeführt. Beim CalculationView ohne Hint erfolgt dies nach dem Join, direkt vor dem Order by. Bei größeren Datenmengen kann das Auswirkungen auf die Laufzeit haben. Daher scheint der Hint keine allzu positive Wirkung bzgl. der Anzahl der Datensätze und der Laufzeiten zu haben.

Es stellt sich auch die Frage (trotz der kleinen Änderungen im PlanViz), ob der Hint überhaupt gezogen wurde. Die Voraussetzungen für den Einsatz von Hints sind nachfolgend aufgeführt:

  • Ist der Hint für den Stand des Systems verfügbar? Siehe dazu die Tabelle Hints im System.
  • Liegen die Voraussetzungen für den CalculationView selbst vor? Es muss ein unfolded View vorliegen, d.h. es werden alle Tabellen des CalculationViews bei der Ausführung herangezogen?
    Ein Blick in den Ausführungsplan zeigt, dass alle Tabellen vorliegen und genutzt werden.
  • Wie im OSS Hinweis 2142945 beschrieben, kann der Monitoring View M_CE_CALSCENARIO_HINTS genutzt werden, um genutzte Hints zu prüfen.
    Das liegt in unserem Fall vor:
Abbildung 4: Prüfung der Hint Nutzung über den Monitoring View M_CE_CALSCENARIO_HINTS

Fazit

Wie es aussieht, führen die getesteten Hints im Beispiel nicht zwingend zu einer wesentlichen Verbesserung im anvisierten Bereich der Reduzierung der Anzahl der Datensätze. Man könnte jetzt weitere Hints probieren, aber alles in allem scheint dieser Weg keinen durchschlagenden Erfolg bei diesem Beispiel zu versprechen.

Generell können SQL Hints relativ einfach auch in CalculationsViews zum Einsatz gebracht werden. Allerdings ist die Auswahl eines geeigneten Hints schwierig. Auch sind die Erfolgsaussichten nicht garantiert, wie das Beispiel gezeigt hat. Auf der anderen Seite zeigen etliche OSS-Hinweise, dass ein geeigneter SQL Hint in manchen Fällen die Rettung aus schwierigen Situationen sein kann. Man sollte dabei auch im Blick haben, dass ein CalculationView auch in anderen Szenarien genutzt werden kann. Bspw. kann bei Abbrüchen beim Einsatz eines CalculationViews in einer Transformation hier ein Hint gesetzt werden, der diese Abbrüche verhindert. Dieses Szenario wurde durch die SAP im Rahmen eines Tickets bei Abbrüchen in der Transformation empfohlen.

In dem konstruierten Beispiel scheint es erfolgsversprechender, den CalculationView umzuschreiben oder auch mit Input Parametern und Variablen in dem CalculationView zu arbeiten. Eine Umgruppierung der Tabellen und der Joins (zuerst ein Join über die Salesorg-Daten und die Header-Daten, dann erst diese Daten mit den Items-Daten joinen) brachte keine wesentliche Verbesserung. Eine gescripteter View bzw. die Umsetzung in einem SQL-Statement wurde noch nicht getestet. Auch die Nutzung von Input Parametern und Variablen in einem CalculationView ist eine Möglichkeit. Die Nutzung dieser Optionen ist aber auch nicht ganz einfach. Aber das ist ein Fall für eine Betrachtung in einem weiteren Blog.

Nehmen Sie Kontakt zu uns auf!

    Mit der Erhebung, Verarbeitung und Nutzung meiner personenbezogenen Daten zur Bearbeitung meiner Anfrage erkläre ich mich einverstanden. Ich kann mein Einverständnis jederzeit ohne Angabe von Gründen widerrufen. Weitere Informationen finden Sie in unserer Datenschutzerklärung.