D3kjd3Di38lk323nnm ix Inhalt 1 Einführung 1 1.1 Performanceprobleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Architektur und Programmierung . . . . . . . . . . . . . . . . . . . . . 2 1.2.1 1.2.2 1.2.3 1.2.4 Die SAP-System-Architektur . . . . . . . . . . . . . . . . . . . Optimale Performance . . . . . . . . . . . . . . . . . . . . . . . . Programmierung als Basis . . . . . . . . . . . . . . . . . . . . . Beschränkung auf die ABAP-Programmierung . . . . . . 2 3 4 5 1.3 Themen und Aspekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3.1 1.3.2 1.3.3 Vier Themen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Vier Aspekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Vier Themen in vier Aspekten . . . . . . . . . . . . . . . . . . 8 1.4 Inhaltsübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.5 Wie sollten Sie das Buch lesen? . . . . . . . . . . . . . . . . . . . . . . 10 1.6 Weit verbreitete Missverständnisse . . . . . . . . . . . . . . . . . . . 11 1.7 Beispielprogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.8 Übersicht über die SAP-Releases . . . . . . . . . . . . . . . . . . . . . 14 1.9 Abbildungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2 Performance-Tools 15 2.1 Kapitelübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.2 Performance-Trace (ST05) . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.1 2.2.2 2.2.3 2.2.4 Was zeigt die Performance-Trace? . . . . . . . . . . . . . . Erstellen und Darstellen einer Trace . . . . . . . . . . . . Anzeige der Trace-Ergebnisse . . . . . . . . . . . . . . . . . Trace-Dateien permanent speichern . . . . . . . . . . . . . 18 18 20 22 2.3 SQL-Trace (ST05) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 Was zeigt die SQL-Trace? . . . . . . . . . . . . . . . . . . . . Struktur der SQL-Trace . . . . . . . . . . . . . . . . . . . . . . Die SQL-Trace-Liste . . . . . . . . . . . . . . . . . . . . . . . . Verdichtung nach SQL-Anweisungen . . . . . . . . . . . Verdichtete Tabellenzugriffe . . . . . . . . . . . . . . . . . . Liste identischer Select-Anweisungen . . . . . . . . . . . . Detailinformationen der SQL-Trace . . . . . . . . . . . . 23 24 25 29 33 34 35 Siegfried Boes, Performance-Optimierung von ABAP®-Programmen, dpunkt.verlag, ISBN 978-3-89864-615-4 x Inhalt 2.4 Puffer-Trace (ST05) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 Was liefert die Puffer-Trace? . . . . . . . . . . . . . . . . . Erstellen und Anzeigen der Trace-Daten . . . . . . . . Die Puffer-Trace-Liste . . . . . . . . . . . . . . . . . . . . . . Verdichtete Tabellenzugriffe . . . . . . . . . . . . . . . . . Detailinformationen der Puffer-Trace . . . . . . . . . . 40 40 41 44 44 2.5 RFC-Trace (ST05) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.5.1 2.5.2 2.5.3 2.5.4 Was zeigt die RFC-Trace? . . . . . . . . . . . . . . . . . . . Erstellen und Anzeigen der Trace-Daten . . . . . . . . Die RFC-Trace-Liste . . . . . . . . . . . . . . . . . . . . . . . Detailanzeigen der RFC-Trace . . . . . . . . . . . . . . . . 46 46 47 48 2.6 Enqueue-Trace (ST05) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.6.1 2.6.2 2.6.3 2.6.4 Wie zeigt die Enqueue-Trace? . . . . . . . . . . . . . . . . Erstellen und Anzeigen der Trace-Daten . . . . . . . . Die Enqueue-Trace-Liste . . . . . . . . . . . . . . . . . . . . Detailinformationen der Enqueue-Trace . . . . . . . . 50 50 50 52 2.7 ABAP-Trace (SE30) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 Welche Daten zeigt die ABAP-Trace? . . . . . . . . . . . Erstellen einer Trace . . . . . . . . . . . . . . . . . . . . . . . Übersicht über die Trace . . . . . . . . . . . . . . . . . . . . Der Messprozess der ABAP-Trace . . . . . . . . . . . . . Die Hitliste der ABAP-Trace . . . . . . . . . . . . . . . . . Die Aufrufhierarchie der ABAP-Trace . . . . . . . . . . Weitere Hitlisten – Tabellenhitliste . . . . . . . . . . . . Detailinformationen der ABAP-Trace . . . . . . . . . . Weitere Möglichkeiten der ABAP-Trace . . . . . . . . . 54 55 60 62 64 67 69 70 71 2.8 Monitor der Statistiksätze (STAD) . . . . . . . . . . . . . . . . . . . 75 2.8.1 2.8.2 2.8.3 2.8.4 Was Sie über die STAD wissen sollten . . . . . . . . . . Aufruf der STAD . . . . . . . . . . . . . . . . . . . . . . . . . . Auswerten der STAD-Daten . . . . . . . . . . . . . . . . . Detailanzeige der STAD-Daten . . . . . . . . . . . . . . . 75 77 78 80 2.9 Code Inspector (SCI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 2.9.1 2.9.2 2.9.3 2.9.4 Was Sie über den Code Inspector wissen sollten . . Ausführen des Code Inspector . . . . . . . . . . . . . . . . Die Performanceprüfungen des Code Inspector . . . Ergebnis einer Code Inspection . . . . . . . . . . . . . . . 82 82 82 84 2.10 Weitere Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Inhalt 2.11 Neu in SAP NetWeaver Release 7.0 EhP2 . . . . . . . . . . . . . . 89 2.11.1 Die neue ABAP-Trace (SAT) . . . . . . . . . . . . . . . . . . 89 2.11.2 Neuerungen bei der Performance-Trace (ST05) . . . . 91 2.12 Zusammenfassung und Ausblick . . . . . . . . . . . . . . . . . . . . . 93 3 Datenbankwissen 95 3.1 Kapitelübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 3.2 Die Open-SQL-Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 3.2.1 3.2.2 SELECT, der wichtigste Open-SQL-Befehl . . . . . . . . . 98 Open SQL – Native SQL – Plattformspezifisches SQL . . . . . . . . . . . . . . . . . . . 100 3.3 Verarbeitungsschritte auf der Datenbank . . . . . . . . . . . . . . 101 3.4 Effizient Suchen mithilfe eines Index . . . . . . . . . . . . . . . . . 105 3.4.1 3.4.2 Der Datenbankindex . . . . . . . . . . . . . . . . . . . . . . . 105 Technische Realisation von Indizes . . . . . . . . . . . . 108 3.5 Der Datenbankoptimierer . . . . . . . . . . . . . . . . . . . . . . . . . 111 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6 Kosten- und regelbasierte Optimierer . . . . . . . . . . Statistiken und Selektivität . . . . . . . . . . . . . . . . . . Der Full Table Scan . . . . . . . . . . . . . . . . . . . . . . . Bestimmung der Kosten . . . . . . . . . . . . . . . . . . . . . Probleme bei der Wahl des Zugriffspfads . . . . . . . Lässt sich ein Zugriffspfad verbessern? . . . . . . . . . 111 113 117 118 119 121 3.6 Tabellen im SAP-System . . . . . . . . . . . . . . . . . . . . . . . . . . 122 3.6.1 3.6.2 3.6.3 Tabellentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Spezielle Tabellen: Indextabellen . . . . . . . . . . . . . . 125 3.7 Der JOIN-Befehl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 3.7.1 3.7.2 Definition eines Join . . . . . . . . . . . . . . . . . . . . . . . 127 Zugriffsstrategien für den Join . . . . . . . . . . . . . . . . 129 3.8 Datenänderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 3.8.1 3.8.2 Die Änderungsbefehle . . . . . . . . . . . . . . . . . . . . . . 131 Verarbeitung der Änderungsbefehle . . . . . . . . . . . . 132 Siegfried Boes, Performance-Optimierung von ABAP®-Programmen, dpunkt.verlag, ISBN 978-3-89864-615-4 xi xii Inhalt 3.9 Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 3.9.1 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 Die SQL-Trace . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabellenanzeige (SE11) . . . . . . . . . . . . . . . . . . . . Tabelleninhaltsanzeige (SE16) . . . . . . . . . . . . . . . Datenbankprüfungen des Code Inspector (SCI) . . Die Tabellenstatistik (DB05) . . . . . . . . . . . . . . . . Datenbank-Cockpit (DB02) . . . . . . . . . . . . . . . . . 134 134 136 136 137 137 3.10 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 4 Optimale Datenbankprogrammierung 139 4.1 Kapitelübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 4.1.1 Das Beispielprogramm . . . . . . . . . . . . . . . . . . . . . 141 4.2 Effiziente Suche auf der Datenbank . . . . . . . . . . . . . . . . . 143 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 Drei wichtige Zugriffsarten . . . . . . . . . . . . . . . . . Vielfalt der WHERE-Klauseln . . . . . . . . . . . . . . . . . . Die Selektionsoptionen . . . . . . . . . . . . . . . . . . . . Die Form der WHERE-Bedingung . . . . . . . . . . . . . . . Probleme beim Suchen . . . . . . . . . . . . . . . . . . . . . Indexdesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 146 150 154 159 161 4.3 Minimale Zahl übertragener Sätze . . . . . . . . . . . . . . . . . . 165 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.3.8 4.3.9 Ergebnismenge und WHERE-Klausel . . . . . . . . . . . . Doppelte Sätze im Ergebnis . . . . . . . . . . . . . . . . . Der Befehl DISTINCT . . . . . . . . . . . . . . . . . . . . . . . Der Befehl UP TO n ROWS . . . . . . . . . . . . . . . . . . . . UP TO 1 ROWS oder SELECT SINGLE . . . . . . . . . . . . . . Sortieren mit ORDER BY . . . . . . . . . . . . . . . . . . . . . Aggregate – SUM, MAX, MIN, AVG, COUNT . . . . . . . . . . . Der effiziente Existenztest . . . . . . . . . . . . . . . . . . PACKAGE SIZE und OPEN CURSOR . . . . . . . . . . . . . . . . 165 167 168 169 170 171 173 174 176 4.4 Minimale Zahl von Ausführungen . . . . . . . . . . . . . . . . . . 177 4.4.1 4.4.2 4.4.3 4.4.4 4.4.5 Vermeiden von unnötigen Ausführungen . . . . . . . SELECT/ENDSELECT oder SELECT INTO TABLE . . . . . . . . Einzelzugriffe und Array-Zugriffe . . . . . . . . . . . . Die RANGES-Tabelle . . . . . . . . . . . . . . . . . . . . . . . . SELECT FOR ALL ENTRIES . . . . . . . . . . . . . . . . . . . . . 177 178 179 179 181 Inhalt 4.5 Minimale Satzbreite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.5.6 Feldlisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Zusatz INTO CORRESPONDING FIELDS OF . . . . . . . . Projektionsviews . . . . . . . . . . . . . . . . . . . . . . . . . . INDEX-ONLY-Zugriffe . . . . . . . . . . . . . . . . . . . . . . . . Sehr kurze Feldliste – DISTINCT-Werte . . . . . . . . . . . Large Objects (LOB) als Tabellenfelder . . . . . . . . . 188 189 190 191 191 192 4.6 Weitere Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.6.6 Der Befehl CLIENT SPECIFIED . . . . . . . . . . . . . . . . . . Explizites Umgehen des Puffers . . . . . . . . . . . . . . . Dynamisches Open SQL . . . . . . . . . . . . . . . . . . . . Generierter Code . . . . . . . . . . . . . . . . . . . . . . . . . . Native SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dynamisches Native SQL – ADBC-Schnittstelle . . 192 193 193 194 195 196 4.7 Gleichzeitiges Lesen von mehreren Tabellen . . . . . . . . . . . 196 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 Geschachtelte SELECTs und die Alternativen . . . . . . Der FOR ALL ENTRIES . . . . . . . . . . . . . . . . . . . . . . . Die Subquery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Join-View . . . . . . . . . . . . . . . . . . . . . . . . . . . . Beispiele und Vergleiche . . . . . . . . . . . . . . . . . . . . Zusammenhang mit den Goldenen Regeln . . . . . . 197 197 198 199 200 200 201 4.8 Der Join-Befehl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5 4.8.6 4.8.7 Zugriffsarten beim Join . . . . . . . . . . . . . . . . . . . . . Flexibilität des Join . . . . . . . . . . . . . . . . . . . . . . . . Join mit vielen Tabellen . . . . . . . . . . . . . . . . . . . . . Self-Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verteilte Selektivität . . . . . . . . . . . . . . . . . . . . . . . Übertragung redundanter Daten . . . . . . . . . . . . . . LEFT OUTER JOIN . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 203 204 204 205 206 207 4.9 Datenänderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 Effizienz der Zugriffe . . . . . . . . . . . . . . . . . . . . . . . Anzahl der Sätze . . . . . . . . . . . . . . . . . . . . . . . . . . Minimale Zahl der Ausführungen . . . . . . . . . . . . . Verringerung der Satzbreite . . . . . . . . . . . . . . . . . . Puffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 209 209 211 211 4.10 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Siegfried Boes, Performance-Optimierung von ABAP®-Programmen, dpunkt.verlag, ISBN 978-3-89864-615-4 xiii xiv Inhalt 5 Pufferung 217 5.1 Kapitelübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 5.2 Pufferung und Datenarten . . . . . . . . . . . . . . . . . . . . . . . . 218 5.2.1 5.2.2 5.2.3 Die verschiedenen Puffer . . . . . . . . . . . . . . . . . . . 219 Datenarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Datenaktualität und Datenkonsistenz . . . . . . . . . 221 5.3 Der Tabellenpuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.3.8 Architektur des Tabellenpuffers . . . . . . . . . . . . . . Die Aktivierung des Puffers . . . . . . . . . . . . . . . . . Am Puffer vorbeigehende Anweisungen . . . . . . . . Das Laden der Pufferinhalte . . . . . . . . . . . . . . . . . Puffer invalidieren . . . . . . . . . . . . . . . . . . . . . . . . Puffer synchronisieren . . . . . . . . . . . . . . . . . . . . . Verdrängung des Pufferinhalts . . . . . . . . . . . . . . . Zusammenfassung: Tabellenpufferung . . . . . . . . 223 225 227 229 231 232 234 235 5.4 Die Pufferbausteine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 5.4.1 5.4.2 Programmierung von Pufferbausteinen . . . . . . . . 236 Eigenschaften eines guten Pufferbausteins . . . . . . 238 5.5 Weitere Puffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 5.5.1 5.5.2 5.5.3 5.5.4 Benutzerübergreifende Puffer . . . . . . . . . . . . . . . . Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performanceempfehlungen . . . . . . . . . . . . . . . . . . Analyse und Optimierung . . . . . . . . . . . . . . . . . . 241 245 245 245 5.6 Tools zur Untersuchung der Puffer . . . . . . . . . . . . . . . . . 246 5.6.1 5.6.2 5.6.3 5.6.4 5.6.5 5.6.6 5.6.7 5.6.8 Pufferübersicht (ST02) . . . . . . . . . . . . . . . . . . . . . Tabellenaufrufstatistik (ST10) . . . . . . . . . . . . . . SQL-Trace (ST05) . . . . . . . . . . . . . . . . . . . . . . . . Puffer-Trace (ST05) . . . . . . . . . . . . . . . . . . . . . . . ABAP-Trace (SE30) . . . . . . . . . . . . . . . . . . . . . . . Pufferprüfung des Code Inspector (SCI) . . . . . . . . Tabellenstatistiken (DB05) . . . . . . . . . . . . . . . . . . Allgemeine Tabellenanzeige (SE17) . . . . . . . . . . . 246 247 249 250 250 251 251 253 5.7 Optimale Nutzung des Tabellenpuffers . . . . . . . . . . . . . . 253 5.7.1 5.7.2 5.7.3 5.7.4 5.7.5 5.7.6 Pufferbedarf . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pufferbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pufferungsart und Tabellendesign . . . . . . . . . . . . Design der Anweisungen . . . . . . . . . . . . . . . . . . . Pufferstatus und Pufferqualität . . . . . . . . . . . . . . Performance des Tabellenpuffers . . . . . . . . . . . . . 254 254 255 256 259 259 Inhalt 5.8 Optimale Nutzung von Pufferbausteinen . . . . . . . . . . . . . . 261 5.8.1 5.8.2 5.8.3 5.8.4 Zu vermeidende Fehler bei Pufferbausteinen . . . . . Der Prefill-Zusatzbaustein . . . . . . . . . . . . . . . . . . . Erweiterungen der Pufferbausteine . . . . . . . . . . . . Performance der Pufferbausteine . . . . . . . . . . . . . . 261 262 263 263 5.9 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 6 ABAP – Interne Tabellen 269 6.1 Kapitelübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 6.2 Interne Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 6.2.1 6.2.2 6.2.3 Definition der internen Tabellen . . . . . . . . . . . . . . 271 Schnelligkeit der Suche . . . . . . . . . . . . . . . . . . . . . 277 Technische Aspekte bei internen Tabellen . . . . . . . 279 6.3 Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 6.3.1 6.3.2 ABAP-Trace (SE30) . . . . . . . . . . . . . . . . . . . . . . . . 282 Prüfungen des Code Inspector (SCI) . . . . . . . . . . . 283 6.4 Performance von internen Tabellen . . . . . . . . . . . . . . . . . . 283 6.4.1 6.4.2 Das Problem: Quadratische Laufzeiten . . . . . . . . . 285 Was sind geschachtelte Operationen? . . . . . . . . . . 286 6.5 Operationen auf Einzelzeilen . . . . . . . . . . . . . . . . . . . . . . . 290 6.5.1 6.5.2 6.5.3 6.5.4 6.5.5 6.5.6 6.5.7 Indexoperationen auf Einzelzeilen . . . . . . . . . . . . Einzelsatzoperationen mit der Workarea . . . . . . . . Operationen mit expliziter Schlüsselangabe . . . . . . Optimierung bei einer sortierten Standardtabelle . . Der COLLECT-Befehl . . . . . . . . . . . . . . . . . . . . . . . . . Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ergebnisse: Operationen auf Einzelsätze . . . . . . . . 291 292 293 294 296 297 298 6.6 Operationen auf mehrere Zeilen . . . . . . . . . . . . . . . . . . . . 300 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 Operationen mit WHERE-Bedingung . . . . . . . . . . . . . Optimierung bei der sortierten Standardtabelle . . . Operationen mit beiden Indexintervallen . . . . . . . . Operationen auf alle Zeilen . . . . . . . . . . . . . . . . . . Ergebnisse: Operationen auf mehrere Zeilen . . . . . 301 302 304 305 306 Siegfried Boes, Performance-Optimierung von ABAP®-Programmen, dpunkt.verlag, ISBN 978-3-89864-615-4 xv xvi Inhalt 6.7 Operationen auf ganze Tabellen . . . . . . . . . . . . . . . . . . . . 309 6.7.1 6.7.2 6.7.3 6.7.4 6.7.5 6.7.6 6.7.7 Sortieren der Tabelle . . . . . . . . . . . . . . . . . . . . . . Füllen aus Datenbanktabelle . . . . . . . . . . . . . . . . Kopieren der Tabelle . . . . . . . . . . . . . . . . . . . . . . Löschen doppelter Einträge . . . . . . . . . . . . . . . . . Zusammenfassen und Aufsummieren . . . . . . . . . . Beispielprogramm . . . . . . . . . . . . . . . . . . . . . . . . Ergebnisse: Operationen auf Tabellen . . . . . . . . . 309 310 311 311 312 313 313 6.8 Weitere Laufzeitempfehlungen . . . . . . . . . . . . . . . . . . . . . 314 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 Wann lohnt sich ein Umsortieren? . . . . . . . . . . . . Schlüsseltabellen oder Sekundärschlüssel . . . . . . . Methode der Parallelen Indizes . . . . . . . . . . . . . . Nichtlinearitäten vermeiden durch kleine Blöcke . Vermeiden von nichtlinearen Laufzeiten . . . . . . . 314 315 316 317 318 6.9 Workarea, Feldsymbol oder Referenz . . . . . . . . . . . . . . . . 319 6.10 Sekundärschlüssel auf interne Tabellen . . . . . . . . . . . . . . 321 6.11 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 7 Analyse und Optimierung 327 7.1 Kapitelübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 7.2 Die fünf Ziele der Performanceanalyse . . . . . . . . . . . . . . . 329 7.3 Vorbereitung der Analyse . . . . . . . . . . . . . . . . . . . . . . . . . 332 7.3.1 7.3.2 7.3.3 7.3.4 7.3.5 7.3.6 Auswahl des Testfalls . . . . . . . . . . . . . . . . . . . . . . Aufgabentyp . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zuverlässige Trace-Daten . . . . . . . . . . . . . . . . . . Konsistenzcheck und Potenzial . . . . . . . . . . . . . . Vorabanalyse mit dem Code Inspector . . . . . . . . . Erwartungen und Rahmenbedingungen . . . . . . . . 333 333 334 335 337 337 7.4 Analyse anhand der SQL-Trace . . . . . . . . . . . . . . . . . . . . 337 7.5 Ursachensuche bei SQL-Problemen . . . . . . . . . . . . . . . . . 341 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 Analyse der langsamen SELECTs . . . . . . . . . . . . . . . Analyse großer übertragener Mengen . . . . . . . . . Analyse bei vielen Ausführungen . . . . . . . . . . . . . Analyse bei großen Satzbreiten . . . . . . . . . . . . . . Analyse der Pufferungsprobleme . . . . . . . . . . . . . Analyse der Zugriffe auf mehrere Tabellen . . . . . Analyse der Änderungsoperationen . . . . . . . . . . . 341 347 349 352 352 353 356 Inhalt 7.6 Analyse anhand der ABAP-Trace . . . . . . . . . . . . . . . . . . . . 359 7.6.1 7.6.2 Technische Analyse anhand der Nettozeiten . . . . . 360 Klassifikation der Trace-Ereignisse . . . . . . . . . . . . 362 7.7 Analyse des Skalierungsverhaltens . . . . . . . . . . . . . . . . . . . 365 7.7.1 7.7.2 Das Skalierungsproblem . . . . . . . . . . . . . . . . . . . . 365 Vergleich zweier ABAP-Traces . . . . . . . . . . . . . . . 368 7.8 Analyse der Pufferung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 7.8.1 7.8.2 7.8.3 7.8.4 Analyse anhand der Puffer-Trace . . . . . . . . . . . . . . Analyse der Pufferbausteine . . . . . . . . . . . . . . . . . . Analyse der Nutzung der anderen Puffer . . . . . . . . Analyse der Puffergrößen . . . . . . . . . . . . . . . . . . . 372 372 373 373 7.9 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 8 Programme und Prozesse 375 8.1 Kapitelübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 8.2 Modularisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 8.2.1 8.2.2 8.2.3 8.2.4 Modularisierungsmöglichkeiten in ABAP . . . . . . . Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performanceempfehlungen . . . . . . . . . . . . . . . . . . Analyse und Optimierung . . . . . . . . . . . . . . . . . . . 376 378 379 380 8.3 Workprozesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 8.3.1 8.3.2 8.3.3 8.3.4 Wissenswertes über die Workprozesse . . . . . . . . . . Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performanceempfehlungen . . . . . . . . . . . . . . . . . . Analyse und Optimierung . . . . . . . . . . . . . . . . . . . 381 382 383 384 8.4 Remote Function Call (RFC) . . . . . . . . . . . . . . . . . . . . . . . 385 8.4.1 8.4.2 8.4.3 8.4.4 Was Sie über RFCs wissen sollten . . . . . . . . . . . . . Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performanceempfehlungen bei RFCs . . . . . . . . . . . Analyse und Optimierung . . . . . . . . . . . . . . . . . . . 385 388 390 392 8.5 Sperren und Enqueues . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 8.5.1 8.5.2 8.5.3 8.5.4 Transaktionen, LUWs und Sperren . . . . . . . . . . . . Performance-Tools . . . . . . . . . . . . . . . . . . . . . . . . Performanceempfehlungen zu den Sperren . . . . . . Analyse und Optimierung . . . . . . . . . . . . . . . . . . . 393 398 398 399 Siegfried Boes, Performance-Optimierung von ABAP®-Programmen, dpunkt.verlag, ISBN 978-3-89864-615-4 xvii xviii Inhalt 8.6 Verbuchung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 8.6.1 8.6.2 8.6.3 8.6.4 Wie die Verbuchung funktioniert . . . . . . . . . . . . . Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performanceempfehlungen . . . . . . . . . . . . . . . . . . Analyse und Optimierung . . . . . . . . . . . . . . . . . . 400 403 403 404 8.7 Optimierung durch Parallelisierung . . . . . . . . . . . . . . . . . 405 8.7.1 8.7.2 8.7.3 8.7.4 9 Was ist Parallelisierung? . . . . . . . . . . . . . . . . . . . Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performanceempfehlungen zur Parallelisierung . . Analyse und Optimierung . . . . . . . . . . . . . . . . . . Ausblick 405 405 406 409 411 9.1 Kapitelübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 9.2 Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 9.3 Speicher (Memory) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 9.4 SAP-Standard-Applikations-Benchmarks . . . . . . . . . . . . . 413 9.5 Hardware-Sizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 9.6 Datenarchivierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 A Anhang 417 A.1 Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 A.1.1 A.1.2 A.1.3 A.1.4 Wichtige Hinweise (SAP Notes) . . . . . . . . . . . . . . Artikel im SAP Professional Journal . . . . . . . . . . . Artikel im SAP Insider . . . . . . . . . . . . . . . . . . . . . SDN Blogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 419 420 420 A.2 Veranschaulichung der Goldenen Regeln . . . . . . . . . . . . . 422 A.3 Beispielprogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 A.4 Der Datenbank-Explain . . . . . . . . . . . . . . . . . . . . . . . . . . 425 A.4.1 A.4.2 Information der wichtigsten Ausführungspläne . . 426 Ausführungsplan des Mengenzugriffs . . . . . . . . . 429 ABAP-Befehlsverzeichnis 433 Index 437