inspiricon_performance-optimierung-sap-bw-ladevorgaenge

Performance-Optimierung von SAP BW Ladevorgängen durch Verwendung mehrdimensionaler interner Tabellen

Es kann bei der Beladung von Datenzielen in SAP BW zu langen Laufzeiten kommen, wenn große Datenmengen z.B. in Endroutinen prozessiert werden müssen. Unter Umständen treten Performanceprobleme erst einige Zeit nach Produktivstart bei wachsenden Datenvolumina auf, die zum Zeitpunkt der Entwicklung und in der Testphase so nicht zur Verfügung standen. In solchen Fällen ist es immer mit Risiken verbunden, wenn an einer produktiven Applikation Performanceoptimierungen vorgenommen werden müssen. Der nachfolgend beschriebene Lösungsansatz beschreibt eine Möglichkeit, die Verarbeitung größerer Datenmengen unter gewissen Voraussetzungen deutlich zu beschleunigen, ohne dass Änderungen an der ursprünglich implementierten Logik bzw. Verarbeitung vorgenommen werden müssen.

Aus der Praxis

Ein typisches Beispiel aus der Praxis ist die Ermittlung offener Lieferantenbestellungen. In einem unserer Kundenprojekte war gefordert, für offene Lieferantenbestellungen auf Positionsebene die Einteilungen sowie die Lieferantenbestätigungen und zugehörigen Wareneingänge zu verarbeiten und diese Informationen in Berichten zur Verfügung zu stellen. Ein großer Teil der Verarbeitungslogik war in der Endroutine einer Transformation implementiert, in welcher die Bestellpositionen verarbeiten wurden.

Mit Hilfe von Lookup Tabellen wurden die Einteilungen sowie die Lieferantenbestätigungen und Wareneingänge nachgelesen.  Diese Tabellen waren als Standard Tabellen definiert. Bei der Verarbeitung dieser Tabelleneinträge erfolgten die Berechnung der offenen, bestätigten und unbestätigten Bestellmengen sowie die Verrechnung von Wareneingängen bei Teilbelieferungen. Die Verarbeitung dieser Lookup Tabellen erfolgte in geschachtelten Loops im Rahmen eines Loops über das RESULT_PACKAGE. Da sowohl das RESULT_PACKAGE als auch die Lookup Tabellen mehrere zehntausend Datensätze enthielten, war die Gesamtperformance der Verarbeitung entsprechend gering.

Die Abfrage der Lookup Tabellen erfolgte über komplexe WHERE Klauseln innerhalb mehrerer verschachtelter LOOP – ENDLOOP Schleifen. Tabellen vom TYP HASHED TABLE konnten deshalb nicht ohne weiteres verwendet werden.

Für ca. 400.000 Bestellpositionen betrug die Gesamtlaufzeit der Verarbeitung ca. 90 Minuten.

Die Verwendung sortierter Tabellen führte zu nur zu geringfügigen Verbesserungen der Performance.

Dazu ein Beispiel aus der Verarbeitung:

1_inspiricon_sortierte-tabellen

Das Laufzeitproblem konnte mit Hilfe mehrdimensionaler interner Tabellen gelöst werden. Man definiert dabei eine HASH Tabelle deren Schlüssel mit „TABLE KEY“ performant gelesen werden kann. Im vorliegenden Fall bestand der Schlüssel aus der Nummer des Einkaufsbeleges und der Belegposition. Neben dem Schlüssel enthält die Tabelle an der Stelle eines weiteren Feldes eine zusätzliche interne Tabelle, welche derjenigen aus Abbildung 1 entspricht (it_eemmo06).

2_inspiricon-mehrdimensionale-interne-tabelle

Vorbereitung der Daten

Die Befüllung der ursprünglichen internen Tabelle bleibt unverändert und findet vor dem Loop über die RESULT_PACKAGE statt:

3_inspiricon-result-package

Im Anschluss werden die Daten in die HASH Tabelle übertragen und die ursprüngliche Tabelle gelöscht:

4_inspiricon-hash-tabelle

Verarbeitung der Daten

In der folgenden Verarbeitung wird die Originaltabelle für die Verarbeitung nur noch mit den aktuell benötigten Datensätzen befüllt:

5_inspiricon-datenverarbeitung

Die Verarbeitung der Originaltabelle bleibt unverändert:

6_inspiricon_verarbeitung-originaltabelle

Sie enthält jetzt nur noch diejenigen Datensätze, welche für den aktuellen Verarbeitungsschritt benötigt werden. Im vorliegenden Beispiel sind das die Einteilungen, Wareneingänge sowie die Lieferantenbestätigungen. Da die interne Tabelle nur noch sehr wenige Datensätze enthält, ist die Verarbeitung im Loop entsprechend performant.

Was bringt diese Lösung?

Ein Vorteil dieser Lösung besteht darin, dass an den bereits vorhandenen internen Tabellen und der verwendeten Logik in den WHERE Klauseln keinerlei Änderungen vorgenommen werden müssen. Der Aufwand für den Aufbau der HASH Tabelle fällt für die Gesamtlaufzeit kaum ins Gewicht. Die Lösung kann mit geringem Risiko zur Optimierung der Laufzeit bestehender Applikationen verwendet werden, da der Kern der Verarbeitungslogik unverändert bleibt und lediglich die Datenbereitstellung optimiert.

Das beschriebene Vorgehen empfiehlt sich also beispielsweise bei Applikationen, die schon sich schon seit längerer Zeit im Produktivbetrieb befinden und wegen wachsender Datenmengen an Laufzeitgrenzen stoßen.

Im oben erwähnten Beispiel, der Verarbeitung von Einkaufsbelegen, konnte die Gesamtlaufzeit der Verarbeitung von ca. 90 Minuten auf ca. 15 Minuten reduziert werden.

Quellenangabe der Bilder: Inspiricon AG

Autor dieses Beitrags
Oskar Glaser Lead Consultant BI Reporting
Tel.: +49 (0) 7031 714 660 0
E-Mail: info@inspiricon.de