1) Inhaltsverzeichnis

Werbung
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
Herunterladen