6.4 Performance von internen Tabellen Prüfungen des Code Inspector (SCI)

Ähnliche Dokumente
G.I.B Success Days. Siegen, High Performance Analytics. Performance - Was bedeutet das? Theorie - Performancedefinitionen bei SAP

1 Einsatz des SAP Code Inspectors Konfiguration und Funktionen des SAP Code Inspectors... 67

1 Einführung 1. 2 Performance-Tools 15

4.4 Minimale Zahl von Ausführungen

Komplexität von Algorithmen:

Inhalt. Vorwort zur dritten Auflage 15

BC402. Advanced ABAP GLIEDERUNG DES KURSES. Version der Schulung: 16 Dauer der Schulung: 5 Tage

Optimiertes Laden in die F-Fakten-Tabelle des SAP BW

Es geht also im die SQL Data Manipulation Language.

ABAP Performance Tuning

Performanceoptimierung von ABAP -Programmen

Übersicht der wichtigsten MySQL-Befehle

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

Programmiertechnik 1 FOR-SCHLEIFEN

7.4 Analyse anhand der SQL-Trace Vorabanalyse mit dem Code Inspector

Datenbanken Implementierungstechniken SS2015

Korrekturen und Ergänzungen zur ABAP-Referenz

Programmiertechnik 1 FOR-SCHLEIFEN

Asymptotik und Laufzeitanalyse

12. Hashing. Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete.

2. Hausübung Algorithmen und Datenstrukturen

Oracle 9i Einführung Performance Tuning

12. Datenschutz: Zugriffsrechte in SQL Datenschutz: Zugriffsrechte in SQL

Übungsklausur Algorithmen I

Performance in der Oracle Datenbank von Anfang an

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

2.7 Bucket-Sort Bucket-Sort ist ein nicht-vergleichsbasiertes Sortierverfahren. Hier können z.b. n Schlüssel aus

Algorithmen und Datenstrukturen

13. Hashing. AVL-Bäume: Frage: Suche, Minimum, Maximum, Nachfolger in O(log n) Einfügen, Löschen in O(log n)

Bei for-schleifen muss man nur immer bedenken, dass die letzte Anweisung immer erst nach der Ausführung der restlichen Anweisungen der Schleife

Wirkung Addiert den Inhalt eines numerischen Datenobjekts dobj1 zum Inhalt eines numerischen Datenobjekts dobj2 und weist das Ergebnis dobj2 zu.

Klausur Algorithmen und Datenstrukturen

Programmiertechnik II

Datenstrukturen und Algorithmen. Vorlesung 5

Zunächst ein paar einfache "Rechen"-Regeln: Lemma, Teil 1: Für beliebige Funktionen f und g gilt:

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Defensive T-SQL Datenbankentwicklung

Merge mit nicht eindeutigen by-variablen

2 Wegweiser Projektbeschreibung...69

Datenbank und Tabelle mit SQL erstellen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Datenschutz: Zugriffsrechte in SQL

Objektorientierte Programmierung II

Prüfungsrelevante Studienleistung Logische Programmierung (Sommer 2006) Magische Quadrate. Patricia Röschke (46016) Martin Grandrath (46375)

Kapitel 7: Referentielle Integrität

Übungsklausur Algorithmen I

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

WS 2009/10. Diskrete Strukturen

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Oracle Database 12c Was Sie immer schon über Indexe wissen wollten

2 Die ersten Schritte

Vorlesung Datenstrukturen

Informatik II Übung 10. Pascal Schärli

Table of Contents. SAP_Tips. 1. Performant programmieren Vorwort Open SQL Native SQL...3

Optimierung von Datenbanken

ajanzen.com Umgang mit zur Laufzeit erstellen Selektions-, Sortier- und IF-Bedingungen

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Dynamische Mengen. Realisierungen durch Bäume

public class Test extends MiniJava { public static void main (String [] args) { write(args[0]+args[1]); } } // end of class Test

Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik

Achtung: Groß O definiert keine totale Ordnungsrelation auf der Menge aller Funktionen! Beweis: Es gibt positive Funktionen f und g so, dass

5. Übungsblatt zu Algorithmen II im WS 2017/2018

In diesem Abschnitt wollen wir uns mit der Architektur von Datenbank Managements Systemen beschäftigen.

Grundlagen: Algorithmen und Datenstrukturen

Seminar. Algorithmische Geometrie

Objektorientierte Programmierung VL: Prof. Dr. Marco Block-Berlitz - Freie Universität Berlin Proinformatik III

Online Table Shrink. Freigabe von ungenutztem Speicherplatz. Autor: Ralf Durben, ORACLE Deutschland GmbH

Zeit- und datumsabhängige Daten

Polymorphie und UML Klassendiagramme

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Algorithmik und Programmieren

10.8 Dynamische Blöcke

Wintersemester 2016/ Matrikelnummer: Hinweise. Unterschrift

Abschnitt 7: Komplexität von imperativen Programmen

Programmieren und Problemlösen

10. Datenbank Design 1

Informatik II, SS 2014

Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6

Java programmieren mit JavaKara. Eine Zusammenfassung in Beispielen

Moderne Datenbankkonzepte

Algorithmik Übung 2 Prof. Dr. Heiner Klocke Winter 11/

Inhalt. TEIL I ABAP gestern, heute und morgen. 1 Qualität, Performance und Sicherheit in der aktuellen Softwareentwicklung... 23

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

Primzahlen und Programmieren

Datenbanken II. Methodik zur Optimierung der Datenbanken. (Aissa Aarab)

. Die obige Beschreibung der Laufzeit für ein bestimmtes k können wir also erweitern und erhalten die folgende Gleichung für den mittleren Fall:

14. Rot-Schwarz-Bäume

Wie greifen Sie mit WinCC Runtime Advanced über ein Skript auf eine SQL- Datenbank zu?

WiMa-Praktikum 1. Woche 8

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

SQL Cockpit & SAP HANA Prüfen Sie Ihre SQL Abfragen auf HANA-Tauglichkeit

Informatik II, SS 2014

Transkript:

D3kjd3Di38lk323nnm 6.4 Performance von internen Tabellen 283 6.3.2 Prüfungen des Code Inspector (SCI) Die Prüfungen des Code Inspector (SCI) auf dem Applikationsserver konzentrieren sich ebenfalls auf die internen Tabellen. Er detektiert Anweisungen, die nur durch sequenzielles Lesen auf die interne Tabelle zugreifen: der READ TABLE itab WITH KEY bei allen Tabellentypen, falls keine Optimierung möglich ist, und die analogen Fälle bei DELETE und MODIFY. Diese Fälle finden Sie im Abschnitt 6.5.3 genauer erklärt. der LOOP itab WHERE bei allen Tabellentypen, falls keine Optimierung möglich ist, und die analogen Fälle bei DELETE und MODIFY. Diese finden Sie im Abschnitt 6.6.1 erklärt. Es muss jedoch angemerkt werden, dass der Code Inspector bei den internen Tabellen auch viele weniger interessante Treffer findet, da die nicht optimierten Anweisungen unproblematisch sind, wenn die Tabelle klein ist und klein bleibt. Die Größe der internen Tabelle ist statisch nicht bekannt, sie steht erst zur Laufzeit fest. Zur genaueren Untersuchung der internen Tabellen sollten Sie die Einstellungen der ABAP-Trace auf die Messung der internen Tabellen erweitern. Der Code Inspector liefert nützliche Hinweise auf Anweisungen, die nur sequenziell lesen und dadurch bei großen Tabellen zu langen Laufzeiten führen können. 6.4 Performance von internen Tabellen Für die internen Tabellen gibt es keine so ausgefeilten Regeln wie die Goldenen Regeln der Datenbankprogrammierung. Es ist jedoch sinnvoll, sich zu überlegen, welche dieser Regeln beim Programmieren mit internen Tabellen eine Rolle spielen könnten: Schnelligkeit: Zugriffe auf interne Tabellen können mit aktueller Hardware weniger als eine Mikrosekunde benötigen. Sie sind also ungefähr hundertmal schneller als Datenbankzugriffe. Wird jedoch kein Schlüssel oder Index genutzt, dann kann nur sequenziell gelesen werden. Dies fällt bei kleinen internen Tabellen gar nicht auf, macht jedoch Zugriffe auf große interne Tabellen sehr langsam. Minimale Datenmenge: Wenn beim Füllen aus der Datenbanktabelle alles richtig gemacht wird, dann enthält die interne Tabelle nur jene Daten, die auch wirklich gebraucht werden. Wenige Ausführungen: Array-Verarbeitung ist bei internen Tabellen nicht notwendig. Siegfried Boes, Performance-Optimierung von ABAP -Programmen, dpunkt.verlag, ISBN 978-3-89864-615-4

284 6 ABAP Interne Tabellen Natürlich gibt es keine Puffer, da es keine schnellere Alternative gibt. Satzbreite: Es ist möglich, bei den Zugriffen auf interne Tabellen einen TRANSPORTING-Parameter zu nutzen, um nur die benötigten Felder zu übertragen. Dieser Effekt spielt eine geringe Rolle. Interessanter ist die Möglichkeit, mit Feldsymbolen oder Referenzen zu arbeiten, um so das Kopieren der Daten zu vermeiden. Skalierbarkeit: Bei internen Tabellen werden die Nutzdaten nicht aus einem großen Pool von anderen Daten gesucht, wie es bei der Datenbank der Fall ist. Dadurch fallen die Probleme mit der Schnelligkeit bei internen Tabellen meist erst auf, wenn die Menge der Nutzdaten groß wird. Um das Testen mit sehr großen Mengen zu umgehen, kann auch die Skalierung getestet werden. Die Skalierung sollte linear sein, d.h., die Zeit sollte ungefähr linear mit der Datenmenge zunehmen. Eine schnellere, also quadratische oder sogar kubische, Zunahme muss vermieden werden. Im Folgenden werden die Laufzeit und insbesondere die Skalierbarkeit einen großen Raum einnehmen. Zunächst wird anhand eines Beispiels verdeutlicht, was es bedeutet, wenn die Skalierbarkeit nicht erfüllt ist und die Laufzeiten quadratisch zunehmen. Danach wird erklärt, wie sich dieses Problem vermeiden lässt. Die Abschnitte 6.5, 6.6 und 6.7 liefern die Beschreibung der Laufzeitabhängigkeit sämtlicher Zugriffsarten auf interne Tabellen. Beachten Sie dabei, dass diese Abschnitte zusammenfassende Tabellen enthalten, am Anfang des Abschnitts für die verschiedenen Operationsvarianten und am Ende für die Ergebnisse. Sie können sich damit schnell einen Überblick über die Ergebnisse verschaffen. Der letzte Abschnitt 6.8 zu den Laufzeiten rundet das Thema ab. Bezüglich der Möglichkeit, Kopierkosten einzusparen, finden Sie im Abschnitt 6.9 einige Empfehlungen. Die Sekundärschüssel auf internen Tabellen werden im Abschnitt 6.10 als Ausblick vorgestellt, da sie erst im SAP NetWeaver Release 7.0 EhP2 zur Verfügung stehen. Die Performanceempfehlungen für interne Tabellen beziehen sich vor allem auf die Schnelligkeit der Operationen. Man redet auch von Skalierungsverhalten, was gleich noch deutlicher wird. Im Abschnitt 6.9 erfahren Sie dann, wie Sie die Kopierkosten beim Lesen von sehr breiten Tabellen verringern können.

6.4 Performance von internen Tabellen 285 6.4.1 Das Problem: Quadratische Laufzeiten Stellen Sie sich vor, Ihr Programm bearbeitet Bestellungen unterschiedlicher Größe, d.h. mit N Positionen. Sie haben es getestet: Trotz seiner umfangreichen Funktionalität braucht es für eine Position, d.h. N = 1, gerade 1 Sekunde für die gesamte Verarbeitung. Beim Überprüfen der Linearität haben Sie bei zehn Positionen 1,9 s und bei fünfzig Positionen 8,4 s gemessen. Damit waren Sie zufrieden, denn bei der Zunahme der Positionen von 10 auf 50 wurde das Programm nur um einen Faktor 4,4 langsamer. Auch die Kunden sind zufrieden. Jedoch nutzen die meisten das Programm mit weniger als 100 Positionen und nur ganz selten mit mehr als 100 Positionen. Dann meldet sich ein Kunde bei Ihnen. Er plant, das Programm mit mehr als 1.000 und gelegentlich sogar mit 10.000 Positionen zu verwenden. Wenn das Programm für N = 10.000 tausendmal so lange wie bei N =10 bräuchte, also 2.000 s oder sogar das Doppelte, also ungefähr eine Stunde, dann wäre er sehr zufrieden. Er plant Tests bei N =100, 1.000 und 10.000. Während die 100 Positionen mit 21 s noch gut aussehen, ruft der Kunde Sie nach dem Test von N = 1.000 empört an, da der Test keine 200 s, sondern 1.200 s gedauert hat. Zwei Tests bei N = 10.000 wurden nach 5 Stunden erfolglos abgebrochen. Was ist passiert? Folgende Tabelle fasst das Verhalten zusammen: Anzahl Positionen Laufzeit in s Verhältnis zur Zeit bei 10 Laufzeit in s (Korrigiertes Programm) Verhältnis zur Zeit bei 10 Verhältnis der Laufzeiten 1 1,0 1,0 1,0 10 1,9 1,0 1,8 1,0 1,1 50 8,4 4,4 5,4 3,0 1,6 100 21 11 9,8 5,4 2,1 1.000 1.290 679 90 50 14 10.000 120.888 63.631 888 493 136 Tab. 6 5 Beispiel für quadratisches Verhalten Das Programm enthält eine oder mehrere Anweisungen mit einem quadratischen Laufzeitverhalten. Bei kleinen Datenmengen wirkt sich dies nur minimal aus. Das Verhältnis der Zeiten bei 50 und 10 Positionen sowie bei 100 und 10 sieht nach einer linearen Zunahme aus, wie in der dritten Spalte zu sehen ist. Erst zwischen 100 und 1.000 beginnt der quadratische Anteil der dominierende zu werden. Oberhalb von 1.000 bestimmt er komplett die Laufzeit. Der Fall N =10.000 würde anstelle der veranschlagten 2.000 s ganze 120.000 s, also 33 Stunden, benötigen! Ist das Problem erst erkannt, dann ist die Ursache meist schnell gefunden. Ohne den quadratischen Anteil hat das Programm Laufzeiten, die in der vierten Spalte wiedergegeben sind. In diesem Fall sind für 10.000 Positionen nicht einmal 2.000 s nötig, sondern nur 500 s. Die Spalte fünf der Tabelle zeigt noch etwas Interessantes. Aufgrund des konstanten Anteils weist das korrigierte Programm zwischen 10 und 50 oder Siegfried Boes, Performance-Optimierung von ABAP -Programmen, dpunkt.verlag, ISBN 978-3-89864-615-4

286 6 ABAP Interne Tabellen 10 und 100 keine lineare Zunahme auf, sondern eine weit geringere Zunahme. Die Tatsache, dass die Zunahme bei kleinen Datenmengen aufgrund des konstanten Anteils deutlich geringer als linear ausfällt, wird bei den meisten einfachen Linearitätschecks übersehen. Die letzte Spalte macht deutlich, um welchen Faktor das fehlerhafte Programm länger dauert als die korrigierte Version. Das zeigt das folgende Bild noch eindrucksvoller. Abb. 6 2 Laufzeiten der quadratischen und linearen Lösung 1.000 900 800 Originalprogramm g Korrigiertes Programm sec) fzeit (in Lauf 700 600 500 400 300 200 100 0 0 200 400 600 800 1.000 Positionen Das Beispiel und die Abbildung zeigen eindrucksvoll die Auswirkungen von quadratischen Laufzeiten bei großen Datenmengen. Ein solches Verhalten muss auf jeden Fall vermieden werden. Deshalb muss bei allen Anwendungen, die größere Objekte verarbeiten, die lineare Skalierung sichergestellt werden. 6.4.2 Was sind geschachtelte Operationen? Viele Probleme mit quadratischen Laufzeiten lassen sich auf schlecht programmierte geschachtelte Schleifen (Nested Loops), oder allgemeiner, auf geschachtelte Operationen zurückführen. Empfehlungen, die dazu raten, geschachtelte Operationen einfach zu vermeiden, gehen an dem Problem vorbei. Meist ist es einfach erforderlich, zwei interne Tabellen miteinander abzugleichen. Mit etwas Verständnis der Problematik lässt sich diese Aufgabe jedoch sehr gut lösen. Am häufigsten sind die geschachtelten Schleifen mit Lesezugriffen, also READs und LOOPs. Diese gibt es in folgenden drei Formen:

6.4 Performance von internen Tabellen 287 Es besteht eine 1:1-Beziehung zwischen den Sätzen der äußeren und der inneren Tabelle, die Sätze sind über eindeutige Schlüssel verbunden. Als innere Operation genügt eine Einzelsatzoperation, z.b. ein READ: LOOP AT itab1 INTO wa1. READ TABLE itab2 INTO wa2 WITH TABLE KEY k1 = wa1-k1 k2 = wa2-k2. Es besteht eine 1:C-Beziehung zwischen den Sätzen der beiden Tabellen, z.b. eine hierarchische Beziehung zwischen Kopf- und Positionsdaten. Die Zahl C ist durch die Daten vorgegeben und hängt nicht von N ab. Die 1:C-Beziehung kann eine feste Beziehung sein oder nur im Mittel gelten. Es kann sogar sein, dass C in der Regel 1 ist, aber eben nicht immer. Die innere Operation muss mehrere Sätze bearbeiten können, was z.b. der LOOP mit WHERE- Bedingung kann: LOOP AT itab1 INTO wa1. LOOP AT itab2 INTO wa2 WHERE k1 = wa1-k1. Schließlich kann es sein, dass gar keine Beziehung zwischen den Sätzen der beiden Tabellen existiert. Dann gibt es keine Bedingung auf die innere Tabelle und sie wird komplett bearbeitet. Die innere Operation könnte z.b. ein vollständiger LOOP sein: LOOP AT itab1 INTO wa1. LOOP AT itab2 INTO wa2. Die Gesamtlaufzeit bzw. das Skalierungsverhalten der geschachtelten Operationen folgt aus der Anzahl der Ausführungen der inneren Operation und der Dauer pro Ausführung. Die Anzahl ist durch die Größe der äußeren Tabelle N1 gegeben. Laufzeiten der geschachtelten Operationen Im ersten Fall, wenn nur ein Satz pro Zugriff betroffen ist, wird die Skalierung der inneren Operation durch die Schnelligkeit der Suche bestimmt. Diese kann ein schneller direkter Zugriff sein, eine binäre Suche oder ein langsames sequenzielles Lesen. Entsprechend ist die Laufzeit pro Zugriff konstant oder logarithmisch bzw. linear Siegfried Boes, Performance-Optimierung von ABAP -Programmen, dpunkt.verlag, ISBN 978-3-89864-615-4

288 6 ABAP Interne Tabellen von N2 abhängig. Die Gesamtlaufzeit ergibt sich aus dem 1:1- Zusammenhang zwischen N1 und N2, also N1 = N2 = N, d.h.: O(N) oder O(N*logN) oder O(N*N) Der zweite Fall erweist sich als sehr ähnlich. Hier sind wenige Sätze C betroffen, der Zugriff hängt von der Suchdauer nach den Sätzen ab. Es stehen die gleichen drei Möglichkeiten der Zugriffe wie im ersten Fall zur Verfügung. Die 1:C-Beziehung ergibt für N1 und N2 den Zusammenhang N2 = C*N1 = C*N, deshalb gilt: O(N*C) oder O(N*log(N)+N*C) oder C(N*C*N) Der dritte Fall verhält sich anders. Die innere Operation bearbeitet die ganze Tabelle und skaliert deshalb immer mindestens mit N2, eventuell sogar mit N2*logN2. Andererseits gibt es keine Beziehung zwischen N1 und N2. Das führt zu : O(N1*N2) oder O(N1*N2*logN2) Tab. 6 6 Skalierung von geschachtelten Operationen Die Aussagen gelten ebenso, falls die innere Operation eine andere Operation ist. Dies können APPEND, INSERT, DELETE, MODIFY und COLLECT auf einzelne, wenige oder viele Zeilen sein. Es können die Operationen auf die ganze Tabelle sein, wie SORT oder DELETE ADJACENT DUPLICATES und die Anweisungen zum Lesen und Füllen. Die Tabelle fasst die drei Möglichkeiten zusammen: Anzahl Operationen Sätze pro Operation Skalierung pro Operation Operationsart Abschnitt N 1 O(1) O(logN) O(N) Einzelne Zeilen 6.5 N C O(C) O(logN) O(N) Wenige Zeilen 6.6 N1 N2 O(N2) Viele Zeilen 6.6, 6.7 Wie lässt sich eine quadratische Skalierung vermeiden? Es ist möglich, in allen drei Fällen ein quadratisches Skalierungsverhalten zu vermeiden: Im ersten Fall muss darauf geachtet werden, dass die innere Operation keine lineare Laufzeit hat, also eine optimierte Suche nutzen kann: entweder eine binäre Suche oder einen direkten Zugriff. Im Abschnitt 6.5 wird das Skalierungsverhalten für alle Befehle auf einzelne Zeilen und alle Operationstypen vorgestellt. Im zweiten Fall verhält es sich ähnlich, auch hier muss als innere Operation eine optimierte Suche verwendet werden. Die Befehle mit WHERE-Bedingungen werden im Abschnitt 6.6 diskutiert. Im dritten Fall ist die Laufzeit der inneren Operation bereits immer linear, also O(N2). Hier ist es entscheidend, wie sich die Größen der

6.4 Performance von internen Tabellen 289 beiden Tabellen verhalten. Quadratisches Verhalten wird so lange vermieden, wie höchstens eine der beiden Tabellen groß wird, d.h., entweder ist N1 = N oder N2 = N, aber nicht beide zusammen. Falls es nicht vermieden werden kann, dass beide Tabellen groß werden, dann muss das quadratische Verhalten akzeptiert werden. Es gibt durchaus Aufgaben, bei denen dies der Fall ist. Dann muss auch eine Beziehung zwischen den Sätzen der Tabellen bestehen: Es hat jeder Satz der Tabelle 1 mit jedem Satz der Tabelle 2 etwas zu tun und es gilt N1 = N2 = N. Beispiele für quadratische Algorithmen sind Optimierungsaufgaben u.ä.. Beachten Sie jedoch, dass normalerweise ein solches Problem nicht einfach in Ihrem ABAP-Alltag auftaucht, ohne dass Sie es vorher wüssten. Sie sollten deshalb immer genau überprüfen, ob zwei vollständige Schleifen über große Tabellen wirklich notwendig sind. Vielleicht verbirgt sich doch irgendwo eine Bedingung zwischen den Sätzen, die nicht unbedingt so offensichtlich wie in folgendem Beispiel sein muss: LOOP AT itab1 INTO wa1. LOOP AT itab2 INTO wa2. IF ( wa2-field1 = wa1-field1 ). Die geschachtelten Schleifen sind eine Möglichkeit, wie es zu vielen Ausführungen von Operationen auf interne Tabellen kommen kann, sie sind jedoch nicht die einzigen. Es gibt viele weitere Möglichkeiten. Nicht immer liegt die äußere Schleife in unmittelbarer Nähe, sie kann mehrere Aufrufebenen darüber liegen. Es können mehrere Schleifen sein. Auch DO/ENDDO- oder WHILE-Schleifen sind möglich. Es ist deshalb nicht sinnvoll, die Aussagen auf bestimmte Befehlskombinationen zu beschränken. Vielmehr geht es allgemein darum, dass jede Operation auf eine interne Tabelle, die groß werden kann, so programmiert sein muss, dass sie häufig ausgeführt werden kann. Allgemeinere geschachtelte Operationen Um Performanceprobleme zu vermeiden, die bei großen internen Tabellen beachtlich werden können, sollten Sie bei Zugriffen auf interne Tabellen einige Punkte beachten. Die Operationen auf einzelne oder wenige Sätze sollten effizient sein, also schneller als linear. Trifft eine Operation die ganze Tabelle oder einen großen Teil davon, dann sollte diese Operation möglichst selten ausgeführt werden. In den nächsten drei Abschnitten erfahren Sie, wie sich die einzelnen Befehle bei den unterschiedlichen Operationstypen und den unterschiedlichen Tabellentypen verhalten. Siegfried Boes, Performance-Optimierung von ABAP -Programmen, dpunkt.verlag, ISBN 978-3-89864-615-4

290 6 ABAP Interne Tabellen 6.5 Operationen auf Einzelzeilen Dieser Abschnitt beginnt mit den Operationen auf einzelne Zeilen. Das sind die Kombinationen aus den Befehlen, d.h. READ, DELETE, MODIFY, APPEND, INSERT und COLLECT, mit den Operationstypen, Indexoperation, mit Workarea und mit Schlüssel: Tab. 6 7 Mögliche Operationen auf Einzelzeilen Operationen auf Einzelzeilen R I READ TABLE itab INTO wa INDEX idx. R W READ TABLE itab INTO wa FROM wa0. R K READ TABLE itab INTO wa WITH [TABLE] KEY. D I DELETE itab INDEX idx. D W DELETE TABLE itab FROM wa0. D K DELETE TABLE itab WITH [TABLE] KEY. M I MODIFY itab INDEX idx [TRANSPORTING ]. M W MODIFY TABLE itab FROM wa0 [TRANSPORTING ]. A I APPEND wa0 TO itab. I I INSERT wa0 INTO itab INDEX idx. I W INSERT wa0 INTO TABLE itab. C W COLLECT wa0 INTO itab. Es erweist sich als geschickter, die Anweisungsvarianten nicht gemäß den Befehlen zu diskutieren, sondern gemäß ihrem Operationstyp. Die Laufzeitabhängigkeit ist nicht so sehr von den Befehlen abhängig. Das ist nicht sonderlich überraschend, denn die unterschiedlichen Befehle basieren immer auf derselben Suche und die Suche bestimmt das Skalierungsverhalten. Ob an der gefundenen Stelle ein Satz gelesen, gelöscht, geändert oder ein neuer Satz eingefügt wird, wirkt sich nur in Zusatzkosten aus, die oft von der Größe der Tabelle unabhängig sind. Dagegen hat der Operationstyp der Anweisung einen großen Einfluss auf die Laufzeit. Es macht einen großen Unterschied, ob mit Index oder mit einem Schlüssel gearbeitet wird. Die Unterabschnitte dieses Abschnitts sind deshalb: Indexoperationen auf Einzelzeilen (Typ I) Einzelsatzoperationen mit Workarea (Typ W) Operationen mit expliziter Schlüsselangabe (Typ K) Optimierung bei einer sortierten Standardtabelle (Typ B) Der COLLECT-Befehl