Besseres ABAP – Schnell, sicher, robust

Werbung
Wissen aus erster Hand.
Leseprobe
Für die Performanceanalyse von ABAP-Programmen gibt es eine
Vielzahl an Werkzeugen. In dieser Leseprobe stellen wir Ihnen diese Werkzeuge vor und zeigen Ihnen, wie Sie sie effizient einsetzen
können.
Kapitel 8: »Werkzeuge für die
Performanceanalyse«
Inhaltsverzeichnis
Index
Die Autoren
Leseprobe weiterempfehlen
Robert Arlitt, Thorsten Marcus Dunz, Hermann Gahm, Damir Majer,
Eric Westenberger
Besseres ABAP – Schnell, sicher, robust
497 Seiten, gebunden, Februar 2015
69,90 Euro, ISBN 978-3-8362-2939-5
www.sap-press.de/3641
Kapitel 8
Für die Performanceanalyse von ABAP-Programmen gibt es
eine Vielzahl an Werkzeugen. In diesem Kapitel stellen wir
Ihnen die Werkzeuge vor und zeigen Ihnen, wie Sie diese effizient einsetzen können. Dazu gehen wir auf die wichtigsten
Messergebnisse ein und erklären diese im Detail.
8
Werkzeuge für die
Performanceanalyse
Das SAP-System bietet statische und dynamische Werkzeuge zur Performanceanalyse von ABAP-Programmen, wie z. B. den ABAB Code
Inspector, Performance Trace oder Single Activity Trace. Zusätzlich
gibt es ein Werkzeug, das statische mit dynamischen Prüfungen verknüpft, die SQL Performance Tuning Worklist. Wir stellen diese
Werkzeuge in den folgenden Abschnitten vor:
왘 Abschnitt 8.1, »Statische Prüfungen«
왘 Abschnitt 8.2, »Dynamische Prüfungen und Traces«
왘 Abschnitt 8.3, »Kombinierte Auswertung statischer und
dynamischer Prüfungen (SWLT)«
In jedem Abschnitt zeigen wir Ihnen die Bedienung der Werkzeuge
und gehen auf die Auswertung im Detail ein.
8.1
Statische Prüfungen
Bei statischen Prüfungen wird das Programm analysiert, ohne dass es
ausgeführt werden muss. Sie benötigen also zur Durchführung der
Prüfung keine (produktiven) Daten. Daher können Sie mit statischen
Performanceprüfungen beispielsweise schon während des Entwicklungsprozesses potenzielle Performanceprobleme erkennen und vermeiden. Andererseits wird bei solchen Analysen nicht festgestellt,
ob das Coding überhaupt ausgeführt wird. Im Folgenden beschreiben wir die Performanceprüfungen des Code Inspectors.
259
8
Werkzeuge für die Performanceanalyse
8.1.1
Code Inspector (SCI)
In Kapitel 5, »Werkzeuge für die Qualitätssicherung«, haben wir
Ihnen das Konzept und die Bedienung des Code Inspectors als Werkzeug zur Qualitätssicherung beschrieben. Darüber hinaus enthält insbesondere der Code Inspector eine Reihe von statischen Performanceprüfungen, mit deren Hilfe schon während der Entwicklungsphase
viele typische Performanceprobleme (siehe Kapitel 7, »Typische Performanceprobleme und Lösungen«) erkannt werden können. Die
meisten Prüfungen sind konfigurierbar und können flexibel angepasst
werden. Zu jeder Prüfung erreichen Sie über den Button Info
eine
ausführliche Beschreibung und Tipps zur Vermeidung des Problems.
Performanceprüfungen im
Code Inspector
In der Transaktion SCI können Sie eine Prüfvariante für Performanceprüfungen definieren und die folgenden Prüfungen aktivieren.
Analyse der WHERE-Bedingung für SELECT
Zur Auswahl stehen die folgenden Einzelprüfungen:
왘 keine WHERE-Bedingung
왘 kein Indexfeld in WHERE-Bedingung
왘 kein 1. Indexfeld in WHERE-Bedingung
왘 CLIENT SPECIFIED ohne Mandant
Analyse der WHERE-Bedingung für UPDATE und DELETE
Es stehen dieselben Einzelprüfungen wie beim SELECT zur Verfügung.
왘 SELECT-Anweisungen, die am Tabellenpuffer vorbei lesen
Bestimmte Zugriffe auf gepufferte Tabellen gehen am Puffer vorbei direkt auf die Tabelle und sollten aus Performancegründen vermieden werden. Diese haben wir in Abschnitt 7.1.3, »Identische
Datenbankzugriffe«, beschrieben.
왘 Problematische SELECT *-Anweisungen suchen
SELECT *-Anweisungen werden z. B. erkannt, wenn nur wenige
Felder einer breiten Tabelle tatsächlich genutzt werden oder die
Größenkategorie einer Tabelle einen Mindestwert überschreitet.
Die Schwellenwerte sind einstellbar. Zugriffe auf gepufferte Tabellen können ausgeschlossen werden.
260
Statische Prüfungen
왘 Nach zu transformierenden SELECT .. FOR ALL ENTRIESKlauseln suchen
Findet SELECT … FOR ALL ENTRIES-Anweisungen, die alternativ
durch einen JOIN ausgeführt werden können.
왘 Nach SELECT-Anweisung mit DELETE-Anweisung suchen
Erkennt SELECT-Anweisungen, deren Ergebnismenge durch ein
anschließendes DELETE FROM <itab> gelöscht wird.
왘 DB-Operationen in Schleifen über Modularisierungseinheiten suchen
Erkennt Tabellenzugriffe in Schleifen, auch über Modularisierungseinheiten hinweg. Unter anderem kann die Schachtelungstiefe definiert werden.
왘 Ändernde Datenbankzugriffe in Schleifen
Findet INSERT-, UPDATE-, MODIFY- oder DELETE-Anweisungen in
Schleifen.
왘 Geschachtelte Schleifen
Meldet, wenn zwei Schleifen ineinander geschachtelt sind, z. B.
LOOP…ENDLOOP, SELECT…ENDSELECT usw.
왘 EXIT oder keine Anweisung in SELECT…ENDSELECTSchleife
SELECT…ENDSELECT-Schleifen, die leer sind oder nur die Anweisung EXIT enthalten (z. B. zur Existenzprüfung eines Datensatzes),
werden hier erkannt. Wahlweise können Einzelsatz- oder gepufferte Zugriffe weggelassen werden.
왘 SELECT-Anweisungen mit anschließendem CHECK
Meldet CHECK-Anweisungen, die direkt auf ein SELECT folgen und
die Ergebnismenge des SELECT einschränken.
왘 Inperformante Operationen auf internen Tabellen
Erkennt sequenzielle Suchoperationen auf internen Tabellen, z. B.
bei (unvollständigem) Schlüsselzugriff. Dabei wird zwischen den
verschiedenen Tabellenarten unterschieden, die wir in Abschnitt
7.2, »Zugriffe auf interne Tabellen«, beschrieben haben. Die Onlinehilfe enthält einige Verbesserungsvorschläge zur Optimierung
der Zugriffe.
왘 SORT-Anweisung in Schleife
Die SORT-Anweisung sollte möglichst nicht innerhalb einer
261
8.1
8
Werkzeuge für die Performanceanalyse
Schleife ausgeführt werden und wird mit dieser Prüfung gemeldet.
왘 Kopieren der aktuellen Tabellenzeile bei LOOP AT …
Findet LOOP AT <itab> oder …INTO <wa>-Anweisungen. Aktuelle
Tabellenzeilen sollten nicht in einen Arbeitsbereich oder die Kopfzeile kopiert werden. Stattdessen sollten Feldsymbole oder Referenzvariablen genutzt werden, um Kopierkosten zu vermeiden.
왘 Inperformante Parameterübergaben
Parameterübergaben z. B. an Methoden oder Funktionsbausteine
können als Referenz- oder Wertübergabe deklariert werden,
wobei Wertübergaben deutlich teurer sind und hier erkannt werden. Es kann nach dem Typ der übergebenen Werte unterschieden
werden, z. B. geschachtelten internen Tabellen, Strings oder langen Feldern.
왘 Kopieren großer Datenobjekte
Findet Zuweisungen mit = oder MOVE, bei denen große Datenmengen kopiert werden müssen, wie z. B. bei geschachtelten internen
Tabellen oder breiten Strukturen (>1000 Byte).
왘 Prüfung der Tabelleneigenschaften
Es werden die technischen Einstellungen von Datenbanktabellen
und Indexen bezüglich der Performance untersucht. Gemeldet
werden Einstellungen, die die Performance verschlechtern können.
왘 Instanzerzeugung von BAdIs
Es wird geprüft, ob die neue (GET BADI…) oder alte (CALL METHOD
cl_exithandler=>get_instance) BAdI-Implementierung verwendet wird. Wahlweise kann bei Verwendung der alten Implementierung geprüft werden, ob die optionalen Parameter genutzt werden, die ebenfalls die Performance der Instanziierung verbessern
(siehe SAP-Hinweis 537844).
왘 Aufrufe von Interface-Methoden innerhalb von Schleifen
finden
Erkennt Aufrufe bestimmter Methoden innerhalb von Schleifen.
In der Voreinstellung werden massenfähige Methoden aus dem
BOPF-Framework (siehe Abschnitt 2.2.1, »Architektur-Blaupause«) erkannt, die in Schleifen pro Einzelsatz gerufen werden.
262
Dynamische Prüfungen und Traces
Wahlweise können auch andere Methoden erkannt werden.
Details dazu finden Sie ebenfalls in der Hilfefunktion
der Prüfung.
Um die typischen Performanceprobleme frühzeitig zu erkennen,
sollten Sie den Code Inspector bereits während der Entwicklungsphase einsetzen. Dazu finden Sie im System einige vorkonfigurierte
globale Prüfvarianten (siehe Abschnitt 5.1.1, »Einsatz des Code
Inspectors«). Dazu gehören z. B. die Prüfvarianten PERFORMANCE_
CHECKLIST_XL oder PERFORMANCE_DB. Diese können Sie in eigene
lokale Prüfvarianten kopieren und Ihren Bedürfnissen anpassen.
8.2
Dynamische Prüfungen und Traces
Im Gegensatz zu statischen Prüfungen muss das Programm bei dynamischen Prüfungen und Traces ausgeführt werden. Die Messungen
sollten in Ihrer Produktiv- oder vorgelagerten Qualitätssicherungsumgebung mit realistischen Datenmengen ausgeführt werden, um
aussagekräftige Ergebnisse zu erhalten. In diesem Abschnitt stellen
wir die folgenden Werkzeuge für die Systemkomponenten Datenbank und ABAP-Schicht vor:
왘 Laufzeitstatistiken (Transaktion STAD)
왘 Performance Trace (Transaktion ST05)
왘 ABAP Trace (Transaktion SAT)
왘 Single Activity Trace (Transaktion ST12)
왘 SQL Monitor (Transaktion SQLM)
왘 Runtime Check Monitor (Transaktion SRTCM)
8.2.1
Laufzeitstatistiken (STAD)
Die Transaktion STAD beinhaltet die Laufzeitstatistiken für alle
Anfragen an das SAP-System. Typische Anfragen sind z. B.:
왘 Dialogschritte (z. B. ein Klick auf einen Button im SAP GUI)
왘 HTTP-Anfrage (z. B. ein Klick auf einen Button in einer
Webapplikation)
263
8.2
8
Werkzeuge für die Performanceanalyse
Dynamische Prüfungen und Traces
왘 Hintergrundjob (ein ABAP-Programm, das im Hintergrund
ausgeführt wurde)
왘 RFC-Aufruf (ein Funktionsbaustein, der remote ausgeführt wird)
Im Allgemeinen sprechen wir von einzelnen Statistiksätzen, die die
Laufzeitstatistiken bilden. Statistiksätze enthalten wichtige technische Informationen, die während der Laufzeit des Programms
gesammelt wurden. Dazu gehören unter anderem die verbrauchte
CPU-Zeit oder Datenbankzeit, aber auch die Anzahl der verarbeiteten Datensätze. Die Statistiksätze werden vom jeweiligen Applikationsserver, auf dem die Anfrage ausgeführt wurde, gesammelt und
in das lokale Dateisystem geschrieben. Dort stehen die Dateien standardmäßig für 48 Stunden zur Verfügung, bevor sie überschrieben
werden (diese Einstellung kann geändert werden, siehe Kasten
»Tipps zur Konfiguration der Transaktion STAD«, am Ende des
Abschnitts).
Sehen wir uns nun an, wie Sie die Statistiksätze selektieren und auswerten können. Abgerundet wird der Abschnitt durch die wichtigsten Einstellmöglichkeiten und Parameter für diese Transaktion.
Selektion der Statistiksätze
Nach dem Ende der Anfrage werden die während der Laufzeit
gesammelten und aggregierten Daten zunächst in einen Puffer und
dann in das Dateisystem des Applikationsservers geschrieben. In der
Transaktion STAD können Sie diese Daten dann selektieren (siehe
Abbildung 8.1).
Im Feld für das Zeitintervall wählen Sie die Zeit so, dass das Ende der
Anfrage im Selektionszeitraum liegt. Dies ist z. B. bei lange laufenden Anfragen wie Hintergrundprozessen von Bedeutung. Beachten
Sie auch, dass Sie den Zeitraum nicht zu groß wählen, da sich dies
negativ auf die Geschwindigkeit der Abfrage und den Speicherverbrauch im Applikationsserver auswirkt. Je mehr Anfragen im SAPSystem angefallen sind, desto kürzer sollte der ausgewählte Zeitraum
sein. In stark belasteten Systemen sollten hier nur wenige Minuten
eingetragen werden oder die Selektion auf einen Applikationsserver
(über den Button Server selection) beschränkt werden.
264
Abbildung 8.1 Selektionsmaske in STAD
Darüber hinaus können Sie noch weitere Filter wie den Benutzernamen, das Programm oder die Transaktion, den Tasktyp (DIALOG,
RFC, BACKGROUND usw.) und verschiedene Schwellenwerte, z. B. Mindestantwortzeit oder Mindestdatenbankzeit, angeben.
Auswertung der Statistiksätze
Nachdem Sie die Selektion ausgeführt haben, erhalten Sie eine Liste
aller Statistiksätze, die im selektierten Zeitraum angefallen sind
(Abbildung 8.2). In dieser Übersicht werden schon wichtige KPIs wie
Response time, CPU Time und DB Request time angezeigt. Über den
Button Sel. fields können Sie auch weitere Detailinformationen in
dieser Liste einblenden.
265
8.2
8
Werkzeuge für die Performanceanalyse
Dynamische Prüfungen und Traces
Zeit
Bedeutung
Database request time
Zeit, die für Datenbankzugriffe (Open SQL und
natives SQL) verbraucht wurde
Enqueue time
Zeit für Sperranfragen an den SAP Enqueue
Service
Tabelle 8.1 Zeitkomponenten (Forts.)
Abbildung 8.2 Liste aller Statistiksätze
Komponenten der
Antwortzeit
Beim Doppelklick auf einen Eintrag wird der Statistiksatz im Detail
angezeigt. Im oberen Teil sehen Sie einen Überblick über die Zeitverteilung (siehe Abbildung 8.3).
Die wichtigsten Komponenten der Antwortzeit sind in Tabelle 8.1
aufgeführt. Weitere Details finden Sie auch in SAP-Hinweis 8963.
Zeit
Bedeutung
Wait for work process
Zeit, auf die auf einen freien Workprozess
gewartet wurde (in der Dispatcherqueue)
Processing time
Berechnet aus Response time – alle anderen
hier genannten Zeiten. Beinhaltet in der Regel
Zeit für ABAP Processing und CPU-Verbrauch,
aber auch Wartezeiten (z. B. RFC, Verbuchung, WAIT, …), wenn der Workprozess
nicht herausgerollt ist.
RFC + CPIC time
Zeit für die RFC-Kommunikation
Load und Generating
time
Zeit für das Laden und Generieren von
Programmen
Roll (in+wait) time
Zeiten, in denen der Workprozess herausgerollt war und die Zeit für das rein- und rausrollen des Benutzerkontexts.
Abbildung 8.3 Statistiksatz – Zeitverteilung und Datenbankdetails
Tabelle 8.1 Zeitkomponenten
266
267
8.2
8
Werkzeuge für die Performanceanalyse
Details zur
Datenbank
Im unteren Teil der Abbildung 8.3 werden Details zur Datenbankzeit
aufgeführt, z. B. ob die Zeit mit lesenden oder schreibenden Zugriffen verbraucht wurde und wie viele Datensätze jeweils verarbeitet
wurden.
Falls die Transaktion STAD entsprechend konfiguriert ist (siehe Kasten), finden Sie hier auch Details zu Datenbankprozeduren und
Datenbanktabellen. Dazu werden die Anzahl der verarbeiteten
Datensätze und der Zeitverbrauch für Tabellen (siehe Abbildung 8.4)
dargestellt bzw. die Anzahl der Aufrufe und der Zeitverbrauch für
Datenbankprozeduren (hier nicht dargestellt).
Dynamische Prüfungen und Traces
8.2.2
Performance Trace (ST05)
Der Performance Trace (Transaktion ST05) ist ein sehr mächtiges
Werkzeug und neben dem ABAP Trace eines der wichtigsten Werkzeuge zur Performanceanalyse von ABAP-Programmen.
In der Transaktion ST05 können Sie die folgenden Traces erstellen:
왘 SQL Trace
왘 Puffer-Trace
왘 Enqueue Trace
왘 RFC Trace
왘 HTTP Trace
Abbildung 8.4 Statistiksatz – Details zu Datenbanktabellen
Konfiguration
Schließlich möchten wir Ihnen noch zeigen, wie Sie die Transaktion
STAD konfigurieren können, um die hier vorgestellten Details zu sehen.
Tipps zur Konfiguration der Transaktion STAD
Das anfangs erwähnte Zeitfenster von 48 Stunden für die Persistenz der
Daten kann über den SAP-Profilparameter stat/max_files auf bis zu 99
Stunden verlängert werden
Die hier vorgestellten Detaildaten auf Tabellen- und Datenbank-Prozedurebene werden nur angezeigt, wenn die beiden SAP-Profilparameter
stat/tabrec und stat/dbprocrec auf Werte gesetzt werden, die größer als
null sind. Diese Parameter können Sie in der Transaktion ST03 über den
folgenden Pfad dynamisch für einen bestimmten Zeitraum ändern. Dabei
gehen Sie in der Transaktion ST03 über folgenden Pfad: Kollektor & Perf.
Datenbank 폷 Statistiksätze und -datei 폷 Online Parameter 폷 Dialogschrittstatistik.
Im dann angezeigten Dialog können Sie die Parameter für den gewünschten Analysezeitraum ändern. Der Parameter stat/rfcrec für die RFC-Subsätze ist standardmäßig bereits auf »5« gesetzt.
268
Von diesen ist der SQL Trace für die Performanceanalyse der wichtigste. Wir stellen Ihnen anhand des SQL Traces die Aufzeichnung
eines Traces vor, die für die anderen Tracetypen in derselben Art
und Weise durchgeführt wird. Die Auswertung des SQL Traces
besprechen wir im Detail, während wir für die anderen Traces einen
Überblick der wichtigsten Inhalte geben.
Aufzeichnung eines SQL Traces
Ein SQL Trace wird mit den Drucktasten Trace einschalten bzw.
Trace mit Filter einschalten aktiviert. Im ersten Fall gilt die Aufzeichnung für den aktuellen Benutzer und den Server, auf dem die
Transaktion ST05 aufgerufen wurde.
Bei der Aufzeichnung mit Filter stehen Ihnen verschiedene Filter,
wie z. B. Benutzername, Prozess-Nummer (aus der Workprozessübersicht SM50) oder Tabellennamen, zur Verfügung (siehe Abbildung 8.5).
In beiden Fällen können Sie unter Stack-Trace wählen, ob für die
SQL-Anweisungen die ABAP-Aufrufhierarchie mit aufgezeichnet
werden soll oder nicht.
Bei der Aufzeichnung sollten Sie Folgendes beachten:
왘 Es kann immer nur ein SQL Trace pro Applikationsserver aktiviert
werden, das heißt, es ist nicht möglich, mehrere Benutzer oder
Prozesse parallel auf einem Server zu tracen.
269
Hinweise zur
Aufzeichnung
8.2
8
Werkzeuge für die Performanceanalyse
왘 Der Trace wird in Dateien auf dem jeweiligen lokalen Applikationsserver geschrieben, daher muss die Auswertung auf demselben Applikationsserver erfolgen wie die Aufzeichnung.
왘 Es ist zwar möglich, den SQL Trace auf einem anderen Applikationsserver als dem lokalen Server zu aktivieren (siehe Filteroptionen in Abbildung 8.5), für die Auswertung müssen Sie sich dann
aber auf dem Server anmelden, auf dem das Programm mit der
Aufzeichnung ausgeführt wurde.
왘 Der Trace wird im sogenannten Round-Robin-Verfahren in die
Tracedateien geschrieben. Wenn auch die letzte Datei beschrieben
wurde, wird die erste Datei wieder überschrieben, das heißt, ein
lange laufender Trace kann sich so selbst überschreiben und nur
das Ende der Aufzeichnung beinhalten. Achten Sie daher darauf,
den Trace nicht zu lange aufzuzeichnen, um ein Überschreiben der
Daten zu verhindern. Für länger laufende Programme bietet sich
an, eine erste Analyse mit dem SQL Monitor (siehe Abschnitt
8.2.5, »SQL Monitor (SQLM)«) durchzuführen. Die Ergebnisse des
SQL Monitors (z. B. Namen von Tabellen) können Sie anschließend als Filter für eine Aufzeichnung mit der Transaktion ST05
verwenden.
Dynamische Prüfungen und Traces
Für die anderen Tracearten, wie z. B. den RFC Trace, erfolgt die Aufzeichnung analog.
Praxistipp: Tracedaten sichern
Sie können die aufgezeichneten Daten in der Transaktion ST05 sichern,
um sie vor dem Überschreiben zu schützen. Gehen Sie dabei wie folgt vor:
Auf dem Selektionsbildschirm (siehe Abbildung 8.6) wählen Sie das Symbol
Trace-Sätze in DB schreiben. Alle Daten, die den auf diesem Bildschirm eingegebenen Selektionskriterien entsprechen, werden dann in
der Datenbank gespeichert. Über die Drucktaste Trace-Verzeichnis anzeigen (siehe Abbildung 8.5) können Sie dann auf die abgespeicherten
Daten zugreifen und diese anzeigen.
Auswertung des SQL Traces
Um einen SQL Trace anzuzeigen, rufen Sie die Funktion Trace anzeigen auf. Im folgenden Dialog (siehe Abbildung 8.6) können Sie verschiedene Filter auswählen und die Anzeige beeinflussen. Im Bereich
Trace-Typen wählen Sie die Art des Traces, der angezeigt werden
soll, in unserem Fall also den SQL-Trace. Im Bereich Trace-Zeitraum wird der Start- und Endzeitpunkt der Auswertung angegeben.
Im Bereich Trace-Filter können Sie noch zusätzliche Filter wie den
Benutzernamen, Tabellennamen usw. für die Anzeige eingeben.
Abbildung 8.6 Transaktion ST05 – Anzeigen eines SQL Traces
Abbildung 8.5 Transaktion ST05 – Aufzeichnung eines SQL Traces
270
Über die Symbole am oberen Bildschirmrand können Sie folgende
Sichten für den SQL Trace anzeigen:
271
8.2
8
Werkzeuge für die Performanceanalyse
왘 Mit dem Icon
Ausführen gelangen Sie auf die Liste der sogenannten Hauptsätze. Dort sehen Sie pro SQL-Anweisung eine
Zeile, die alle Details zur SQL-Anweisung zusammenfasst.
왘 Mit dem Icon
Trace-Einzelsätze anzeigen erhalten Sie für alle
SQL-Anweisungen die Details wie OPEN oder FETCH.
Dynamische Prüfungen und Traces
tern in der WHERE-Bedingung) ausgeführt wurden. Die Spalte Identisch gibt an, wie viele SQL-Anweisungen prozentual identisch
waren. In diesen Spalten erkennen Sie das typische Problem der
identischen Ausführungen (siehe Abschnitt 7.1.3, »Identische Datenbankzugriffe«) sehr gut.
왘 Mit dem Icon
Struktur-identische Trace-Sätze anzeigen
erhalten Sie eine aggregierte Liste, die alle ähnlichen SQL-Anweisungen zusammenfasst. Strukturidentisch meint hier, dass SQLAnweisungen, die die gleichen WHERE-Bedingungen haben, in einer
Zeile in dieser Sicht zusammengefasst und aggregiert werden.
Diese Anweisungen können von unterschiedlichen Stellen im
ABAP-Programm kommen.
왘 Mit dem Icon
Trace-Übersicht erhalten Sie eine Übersicht
über alle Anweisungen im SQL Trace. Dort sehen Sie eine Zusammenfassung und Auswertung der SQL-Anweisungen nach unterschiedlichen Kategorien.
Im Folgenden gehen wir auf die zwei wichtigsten Sichten ein:
왘 strukturidentische SQL-Anweisungen
왘 Liste der Hauptsätze
Strukturidentische
SQL-Anweisungen
Wichtige Spalten
Sie sollten die Analyse möglichst immer mit der Sicht über die strukturidentischen SQL-Anweisungen beginnen. In dieser Sicht werden
die teuersten SQL-Anweisungen mit den wichtigsten Details und
Kennzahlen dargestellt. Die Liste ist so sortiert, dass die teuersten
SQL-Anweisungen oben stehen, das heißt die SQL-Anweisungen, die
(über alle Ausführungen summiert) am meisten Zeit verbraucht
haben. Im Folgenden beschreiben wir die wichtigsten Werte, die Sie
in dieser Ansicht auswerten können.
In der Spalte Ausführung sehen Sie die Summe der Ausführungen
für die SQL-Anweisung. An dieser Spalte lässt sich das typische Problem vieler Ausführungen (siehe Abschnitt 7.1.2, »Viele Ausführungen«) gut erkennen.
In den Spalten Redundanz und Identisch sehen Sie, ob bzw. wie
viele SQL-Anweisungen identisch ausgeführt wurden. Die Spalte
Redundanz gibt eine absolute Anzahl wieder und weist aus, wie
viele SQL-Anweisungen exakt gleich (das heißt mit gleichen Parame-
272
Abbildung 8.7 Transaktion ST05 – strukturidentische SQL-Anweisungen
In der Spalte Dauer wird die Zeit angezeigt, die für alle Ausführungen der SQL-Anweisung im Trace benötigt wurde. Standardmäßig ist
die Liste nach dieser Spalte sortiert.
In den Spalten Anzahl Sätze und Sätze/Ausf sehen Sie, wie viele
Datensätze von allen Ausführungen der SQL-Anweisung in Summe
bzw. einer Ausführung im Durchschnitt verarbeitet wurden. Anhand
der Werte in diesen Spalten lässt sich das typische Problem der Verarbeitung großer Datenmengen (siehe Abschnitt 7.1.1, »Verarbeitung großer Datenmengen«) gut erkennen.
Die Spalten Dauer/Ausf, Minimale Dauer/Satz und Maximale
Dauer/Satz zeigen an, wie lange die SQL-Anweisung pro Ausführung und Datensatz (minimal und maximal) gebraucht hat. Anhand
dieser Werte können Sie das typische Problem ineffizienter Zugriffspfade (siehe Abschnitt 7.1.4) erkennen.
Die Spalten Puffer-Typ und Objektname zeigen, auf welche Objekte
(Tabellen oder Views) die SQL-Anweisung zugegriffen hat und ob
diese gepuffert sind. Gegebenenfalls können Sie damit Tabellen
identifizieren, auf die unnötigerweise zugegriffen wurde, da nicht
relevant für den Prozessschritt. Bei aktivierter Tabellenpufferung lassen sich auch Tabellen identifizieren, die am Tabellenpuffer vorbei
273
8.2
8
Werkzeuge für die Performanceanalyse
Details und Funktionen zu SQLAnweisungen
Dynamische Prüfungen und Traces
gelesen wurden. Wenn im SQL Trace eine gepufferte Tabelle auftaucht, bedeutet das, dass direkt auf die Datenbank zugegriffen
wurde und nicht aus dem Puffer gelesen werden konnte. Mögliche
Gründe dafür haben wir in Abschnitt 7.1.1 beschrieben.
Doppelklick auf …
Beschreibung
Spalte Ausführung
Springt auf die Liste der Hauptsätze, zeigt
dort aber nur die ausgewählte SQLAnweisung an.
In der Spalte Anweisung sehen Sie den Text der SQL-Anweisung, bei
dem die Feldliste und die FROM-Klausel ausgeblendet sind.
Spalten Redundanz/Identisch
Springt auf die Liste der wertgleichen
SQL-Anweisungen (identical SELECTS),
zeigt dort aber nur die ausgewählte
SQL-Anweisung an.
Spalten Objektname/
Puffer-Typ/Tab-Typ
Springt auf die Informationen zum DDIC.
Spalte Anweisung
Zeigt die SQL-Anweisung in voller Länge
an.
Für die SQL-Anweisungen stehen Ihnen in der Symbolleiste eine
Reihe von nützlichen Funktionen zur Verfügung (Tabelle 8.2).
Icon in Abbildung 8.7
Beschreibung
Blendet die Standardfunktionen (z. B. Filtern,
Sortieren, …) für die Liste (Advanced List
Viewer – ALV) ein.
Tabelle 8.3 Querverweise aus einzelnen Spalten des SQL Traces
Zeigt die ganze SQL-Anweisung mit Platzhaltern (Bind-Variablen) oder in die WHEREBedingung eingesetzten Werten an. Hierfür
wird die erste SQL-Anweisung der zugrunde
liegenden SQL-Anweisungen verwendet.
Die Liste der Hauptsätze ist nach dem Zeitstempel sortiert. Dort
sehen Sie pro ausgeführter SQL-Anweisung eine Zeile im Ergebnis.
In dieser Ansicht finden Sie wichtige Informationen, wie z. B.:
Zeigt die Data-Dictionary-Informationen
(DDIC) zur Tabelle oder View an.
왘 Dauer: Laufzeit der SQL-Anweisung
Zeigt den Ausführungsplan für die SQLAnweisung an.
Zeigt die Aufrufstelle der SQL-Anweisung im
ABAP-Programm an.
Verzweigt auf andere Sichten, z. B. auf die
Liste der Hauptsätze bzw. der wertgleichen
SQL-Anweisungen (identical SELECTS).
Ändert die Anzeige von absoluten Werten auf
relative Werte (%).
Tabelle 8.2 Funktionen in der Symbolleiste des SQL Traces
Diese Symbolleiste mit Funktionen zu einer SQL-Anweisung finden
Sie auf anderen Listen in der gleichen oder sehr ähnlichen Form wieder. Weiterhin hat die Liste noch einige nützliche Querverweise, die
Sie bequem per Doppelklick aktivieren (Tabelle 8.3).
왘 Zeitstempel: Zeitpunkt der Ausführung
왘 Sätze: Ergebnismenge der SQL-Anweisung
왘 Programm-Name: Name des Programms, in dem die SQL-Anweisung ausgeführt wurde
왘 Objektname: Tabelle oder View
In der Symbolleiste stehen Ihnen, neben den in Tabelle 8.2 angezeigten Funktionen noch zusätzlich die in Tabelle 8.4 beschriebenen
wichtigen Funktionen zur Verfügung.
Icons in Abbildung 8.7
Beschreibung
Zeigt die Aufrufhierarchie der SQL-Anweisung,
falls die Option bei der Aufzeichnung mit aktiviert wurde (siehe Abbildung 8.5).
Verzweigt auf die Liste der Einzelsätze der
SQL-Anweisungen.
Verzweigt auf weitere Sichten und Listen.
Tabelle 8.4 Weitere Funktionen in der Symbolleiste des SQL Traces
274
8.2
275
Trace-Hauptsätze
8
Werkzeuge für die Performanceanalyse
Aufrufhierarchie
einer SQLAnweisung
Eine sehr nützliche Funktion auf dieser Liste ist die Anzeige der Aufrufhierarchie. Wenn diese Option bei der Aufzeichnung aktiviert
war, können Sie hier die Aufrufhierarchie sehen, über die eine SQLAnweisung aufgerufen wurde (siehe Abbildung 8.8).
Dynamische Prüfungen und Traces
eine Übersicht, welche Informationen Sie in diesen Traces finden
und wann Sie diese einsetzen können:
왘 Puffer-Trace: Der Puffer-Trace zeichnet Zugriffe auf Tabellen- und
andere Puffer auf. Sie sehen, welche Zugriffe es gab, wie auf die
Puffer zugegriffen wurde und wie lange diese gedauert haben.
Dieses Werkzeug wird benötigt, wenn es beim Zugriff auf die Puffer zu Performanceproblemen kommt, was aber nur in Ausnahmefällen der Fall ist. Zugriffe, die am Tabellenpuffer vorbeigehen,
kommen häufiger vor und werden mit dem SQL Trace analysiert.
왘 Enqueue Trace: Der Enqueue Trace zeichnet alle Zugriffe auf den
Enqueue Service im SAP-System auf. Sie sehen, welche Zugriffe es
gab, von welcher Art diese waren und wie lange diese gedauert
haben. Dieser Trace wird benötigt, um Sperranfragen im SAP-System genauer zu analysieren.
Abbildung 8.8 Transaktion ST05 – Hauptsätze mit Aufrufhierarchie
Die Analyse der Aufrufhierarchie ist bei den typischen Problemen
der vielen Ausführungen bzw. identischer Ausführungen sehr nützlich. Sie können damit schnell die Verursacher identifizieren. Per
Doppelklick können Sie von hier auf die jeweilige Aufrufstelle im
ABAP-Quelltext springen.
Weitere Sichten
im SQL Trace
Für den SQL Trace gibt es noch ein paar speziellere Sichten, über die
wir hier einen kurzen Überblick geben wollen:
왘 Wertgleiche Anweisungen: Hier werden die identischen SQLAnweisungen angezeigt. Sie sehen, wie oft SQL-Anweisungen mit
den gleichen Werten ausgeführt wurden.
왘 Tabellenzugriffe: Hierbei handelt es sich um eine Gruppierung
auf Tabellenebene und SQL-Typ (SELECT, DELETE, INSERT, UPDATE
…). Sie sehen also, wie und wie oft auf Tabellen zugegriffen
wurde.
왘 Trace-Übersicht: Zeigt den SQL Trace im Überblick und wertet
verschiedene Aspekte aus, wie z. B. lesende, schreibende Verarbeitung, Ergebnismengen, Pufferung usw.
Weitere Traces in der Transaktion ST05
왘 RFC Trace: Der RFC Trace zeichnet alle RFC-Anfragen (sowohl
Client als auch Server) auf. Sie sehen, welche RFC-Zugriffe es gab,
von welcher Art diese waren, welche Datenmengen übertragen
wurden und wie lange diese gedauert haben. Dieser Trace wird
benötigt, um RFC-Anfragen genauer zu analysieren.
왘 HTTP Trace: Der HTTP Trace zeichnet alle HTTP-Anfragen (sowohl Client als auch Server) auf. Sie sehen, welche HTTP-Zugriffe
es gab, von welcher Art diese waren, welche Datenmengen übertragen wurden und wie lange diese gedauert haben. Dieser Trace
wird benötigt, um HTTP-Anfragen genauer zu analysieren.
8.2.3
Laufzeitanalyse mit dem ABAP Trace/ABAP
Profiler (SAT)
Mit der Transaktion SAT (Single Activity Trace) kann die Ausführung eines ABAP-Programms detailliert aufgezeichnet werden. Dabei werden die Ausführungszeiten von einzelnen ABAP- und SQLAnweisungen und auch Modularisierungseinheiten (z. B. Methoden, Funktionsbausteine etc.) gemessen. Zusammen mit der optional aufgezeichneten Aufrufhierarchie und der Anzahl der Aufrufe
kann damit die Performance eines Programms sehr genau untersucht werden.
Neben dem SQL Trace gibt es in der Transaktion ST05 noch weitere
Traces, die aber eher selten benötigt werden. Wir geben Ihnen hier
276
277
8.2
8
Werkzeuge für die Performanceanalyse
Die ABAP-Laufzeitanalyse erfolgt in mehreren Schritten:
1. Einstellung der Messvariante
2. Messung
3. Auswertung des aufgezeichneten Traces
Im Folgenden beschreiben wir, wie Sie dieses Werkzeug effizient
einsetzen können.
Einstellung der Messvariante
Die Messvariante definiert, welche Informationen im Detail aufgezeichnet werden sollen. Als Startpunkt können Sie die System-Messvariante DEFAULT in eine benutzerspezifische Variante kopieren und
anpassen. Falls Sie diese ebenfalls DEFAULT nennen, wird sie als
benutzerspezifische Standardeinstellung verwendet. Die Einstellungen der Messvariante sind in drei Register gegliedert:
왘 Dauer und Art (Wie soll aufgezeichnet werden?)
왘 Anweisungen (Was soll aufgezeichnet werden?)
왘 Programmteile (weitere Filter)
Dauer und Art
Größeneinstellungen
In dem Register Dauer und Art (Abbildung 8.9) können Sie die
maximale Größe und Dauer der Aufzeichnung einstellen. Die Standardwerte (10.000 KB, 1.800 Sekunden) reichen für die meisten
Traceszenarien aus.
Dynamische Prüfungen und Traces
Bei der Aggregation Pro Aufrufstelle wird jede Aufrufstelle im
Trace vermerkt, aggregiert über die Anzahl von Aufrufen. Falls Sie
die Verdichtung des Traces deaktivieren (Aggregation Keine), können Sie auch Aufrufhierarchien von Anweisungen darstellen und
ebenfalls die Änderung des Speicherverbrauchs zur Laufzeit protokollieren. Der Nachteil einer Aufzeichnung ohne Aggregation ist
aber, dass der Trace sehr groß werden kann, da jede Ausführung einzeln aufgezeichnet wird.
Aggregation
Mit der Option Explizites Ein- und Ausschalten der Messung können Sie hier auch das explizite Ein- und Ausschalten der Aufzeichnung aktivieren, falls Sie z. B. nur das Speichern im letzten Dialogschritt einer Transaktion aufzeichnen wollen.
Optionen
8.2
Praxistipp: Explizites An- und Ausschalten der Messung
Sie haben verschiedene Möglichkeiten, die Traceaufzeichnung zu aktivieren:
왘 über OK-Codes /ron und /roff
왘 über das Menü: System 폷 Hilfsmittel 폷 Laufzeitanalyse 폷 Einschalten/
Ausschalten
왘 Sie können einen ABAP Trace für einen bestimmten Programmteil aktivieren, indem Sie zu Beginn und am Ende des Programmteils die
ABAP-Anweisung SET RUN TIME ANALYZER ON bzw. OFF ausführen.
왘 Über eine Verknüpfung: Legen Sie mit dem Button
Verknüpfungen
zu den Systembefehlen /ron und /roff z. B. auf dem Desktop an.
Diese können Sie per Drag & Drop auf das SAP-GUI-Fenster ziehen
und damit den Trace steuern.
Mit der Option RFC- und Verbuchungsaufrufe kann die Aufzeichnung an andere Workprozesse übergeben werden. Dazu muss folgender Profilparameter auf Quell- und Zielserver gesetzt werden:
rstr/accept_remote_trace = TRUE
Anweisungen
Sie können einstellen, welche Anweisungen in dem Trace separat
aufgeführt werden sollen (siehe Abbildung 8.10). Hier sollten Sie auf
jeden Fall noch die Lese- und Änderungsoperationen für Interne
Tabellen aktivieren, um bei der Auswertung die Zeit, die zur Verarbeitung interner Tabellen benötigt wurde, angezeigt zu bekommen.
Abbildung 8.9 Messvariante – Dauer und Art der Aufzeichnung
278
279
Interne Tabellen
aktivieren
8
Werkzeuge für die Performanceanalyse
Dynamische Prüfungen und Traces
Abbildung 8.11 Einstiegsbild der Transaktion SAT
Abbildung 8.10 Messvariante – separat aufgeführte Anweisungen
Programmteile
Das Register Programmteile bietet die Möglichkeit, die Aufzeichnung auf einzelne Programmteile (Modularisierungseinheiten) einzugrenzen, z. B. wenn nur die Ausführung einer Methode oder eines
Funktionsbausteins aufgezeichnet werden soll. In der Regel werden
Sie bei der Performanceanalyse aber an den Laufzeitbeiträgen aller
Programmteile interessiert sein und diese Option nicht nutzen.
Aufzeichnung des SAT Traces
Nachdem Sie die Messvariante angelegt haben, kann der Trace im
Einstiegsbild der Transaktion SAT (Abbildung 8.11) aktiviert werden. Sie sollten dabei immer das Häkchen bei Namen für interne
Tabellen bestimmen setzen, um bei der Traceauswertung interne
Tabellen mit ihrem im ABAP-Programm verwendeten statt dem
internen technischen Namen anzuzeigen.
Die Aufzeichnung kann auf mehrere Arten aktiviert werden, um
unterschiedliche Ausführungs- und Messszenarien abzudecken:
왘 Im Dialog
왘 Im parallelen Modus
Bei der Aktivierung Im Dialog wird die Anwendung direkt aus der
Transaktion SAT heraus gestartet. Das bietet sich an, wenn Sie die
Anwendung selbst ausführen können. Dabei werden sämtliche Aktivitäten in diesem Modus aufgezeichnet, bis Sie mit der Zurück-Taste
(oder (F3)) die Anwendung verlassen und zum Einstiegsbild der
Transaktion zurückkehren. Falls Sie die Messung mit der Option
Explizites Ein- und Ausschalten der Messung durchführen wollen,
muss die Aufzeichnung separat aktiviert werden, siehe Kasten »Praxistipp: Explizites An- und Ausschalten der Messung«.
Im Dialog
Zur Aufzeichnung bereits aktiver Prozesse können Sie die Messart Im
parallelen Modus verwenden. Zunächst werden die aktiven Prozesse der aktuellen Instanz angezeigt. Prozesse anderer Instanzen
können über den Schalter Serverauswahl ebenfalls angezeigt werden. Zur Aktivierung bzw. Deaktivierung des Traces markieren Sie
den gewünschten Prozess und aktivieren den Trace über die Drucktaste Switch On/Off.
Im parallelen
Modus
Es gibt auch die Möglichkeit, den Trace automatisch bei Eintreten
bestimmter Bedingungen zu aktivieren. Dazu werden die Kriterien
unter für Benutzer/Service definiert und der Trace eingeplant.
Tabelle 8.5 beschreibt die Einstellmöglichkeiten zur Einplanung
einer Messung.
Für Benutzer/
Service
왘 Für Benutzer / Service
280
281
8.2
8
Werkzeuge für die Performanceanalyse
Dynamische Prüfungen und Traces
Kriterium
Mögliche Einstellungen
Server-Name
<bestimmter> oder <alle> Server
Externer Modus
1, …, 6 oder beliebig (Modus/Session
kann in SM04 nachgesehen werden und
ist abhängig von der Serverinstanz)
Prozess-Typ
Dialog, Verbuchung, Hintergrund, RFC,
HTTP, SMTP, ITS, SHO Gebietskonstruktor, beliebig
Objekt-Typ
Transaktion, Funktionsbaustein, Report,
SHO Gebietskonstruktor, URL, beliebig
Max. Anzahl geplanter
Messungen
wie viele Traces nacheinander aktiviert
werden dürfen
Ablaufdatum/-zeit
Gültigkeit der eingestellten Kriterien
Im ABAP Trace werden sowohl Brutto- als auch Nettolaufzeiten für
einzelne Anweisungen und Verarbeitungsblöcke angezeigt. Die Bedeutung dieser Zeiten wird im Kasten erklärt.
Brutto- und Nettolaufzeiten im ABAP Trace
왘 Bruttolaufzeit: Über alle Ausführungen summierte Laufzeit einer
ABAP-Anweisung. Bei Verarbeitungsblöcken (z. B. Formroutine, Methode, Funktionsbaustein usw.) werden die Zeiten anderer Anweisungen innerhalb und unterhalb der aktuellen Aufrufhierarchie dazuaddiert.
왘 Nettolaufzeit: Über alle Ausführungen (Schleifen) summierte Laufzeit
einer einzelnen ABAP-Anweisung. Bei Verarbeitungsblöcken werden
hier die Zeit zum Aufruf des Verarbeitungsblocks und alle Zeiten angegeben, die innerhalb des Verarbeitungsblocks anfallen und die nicht
separat ausgewiesen werden.
Tabelle 8.5 SAT-Kriterien für die Traceart Benutzer/Service
Auswertung des SAT Traces
Mit dem Ende der Aufzeichnung wird der SAT Trace angezeigt, falls
die Option Sofort Auswerten gesetzt wurde. Alternativ können Sie
die Messung über den Karteireiter Auswerten auswählen.
Trace Overhead
Bei der Auswertung des Traces sollten Sie beachten, dass die Aufzeichnung selbst natürlich auch einen CPU-Aufwand verursacht. Bei
der Aufzeichnung eines komplexen Programms kann es daher vorkommen, dass die während des Traces gemessene Laufzeit größer ist,
als ohne Trace. Der ABAP Trace versucht zwar, den von sich selbst
verursachten Overhead herauszurechnen, allerdings gelingt das
nicht immer, und es kann zu Abweichungen der ohne und mit Trace
beobachteten Laufzeiten kommen. Wir können allerdings davon ausgehen, dass der Overhead für alle Traceereignisse derselbe ist, das
heißt, die Laufzeiten der einzelnen Anweisungen werden relativ
zueinander korrekt wiedergegeben.
Die Transaktion SAT bietet verschiedene Sichten und Auswertemöglichkeiten für den ABAP Trace. Alle Sichten sind dabei mit der Sicht
Profil verlinkt, das heißt, Sie können über das Kontextmenü eines
Profils die entsprechenden Daten aus dem Trace in unterschiedlichen Sichten analysieren.
282
Welche Sichten im Einzelnen zur Auswahl stehen, hängt dabei von
der Art der Aufzeichnung ab. Bei aggregierter Aufzeichnung pro Aufrufstelle stehen Ihnen die in Tabelle 8.6 genannten Sichten zur Verfügung.
Sicht
Beschreibung
Profil
Zeigt die Ereignisse nach verschiedenen Profilen an. Es
stehen folgende Profile zur Auswahl: Trace-Ereignisse,
Pakete, Komponenten, Programme.
Hitliste
Zeigt alle Traceereignisse mit Anzahl der Aufrufe,
Brutto- und Nettozeit. Die Bruttozeit entspricht in
etwa der Total Time und die Nettozeit der Own Time
des ABAP Profilers.
DB-Tabellen
Zeigt alle Zugriffe auf Datenbanktabellen an,
entspricht der Sicht im ABAP Profiler.
Zeiten
Zeigt eine detaillierte Liste der Ereignisse mit einer
weiteren Unterteilung der Zeit in Komponenten wie
Datenbankzeit, Datenbankinterface-Zeit, Zeit für
interne Tabellen usw.
Tabelle 8.6 Sichten bei Aggregation pro Aufrufstelle
Bei nicht-aggregierter Aufzeichnung stehen zusätzlich die in Tabelle
8.7 genannten Sichten zur Auswahl.
283
Brutto- und
Nettolaufzeiten
8.2
8
Werkzeuge für die Performanceanalyse
Sicht
Beschreibung
Verarbeitungsblöcke
Zeigt eine interaktive, hierarchische Darstellung der
Ereignisse mit Brutto- und Nettozeit. Die Ebenen der
Aufrufhierarchie können beliebig analysiert werden.
An dieser Stelle gibt es auch eine automatische Analyse zur Darstellung kritischer Verarbeitungsblöcke. Es
können so z. B. alle Modularisierungseinheiten, die
einen Anteil von mehr als 5 % an der Nettozeit haben,
farblich hervorgehoben werden.
Aufrufhierarchie
Zeigt eine Liste der Ereignisse mit Aufrufebene,
Brutto- und Nettozeit.
Dynamische Prüfungen und Traces
Das Profil Trace-Ereignisse wird in Abbildung 8.12 dargestellt.
Durch Auswahl einzelner Ereignisse kann der ABAP Trace entsprechend gefiltert und in der Hitliste oder der Sicht Zeiten dargestellt
werden. Mit einem Doppelklick auf Laufzeitmessung wird der vollständige Trace gezeigt.
Tabelle 8.7 Zusätzliche Sichten, wenn ohne Aggregation aufgezeichnet wird
Beim Einstieg in die Auswertung des Traces werden zunächst die
Sichten Profil: Trace-Ereignisse und Hitliste dargestellt. In der
Hitliste wird der vollständige ABAP Trace angezeigt, sortiert nach
den Nettozeiten der Anweisungen bzw. Ereignisse. Sie haben nun
die Möglichkeit, den ABAP Trace mithilfe unterschiedlicher Sichten
zu untersuchen und den Trace zu filtern.
Sicht »Profil«
Die Profilsicht bietet den zentralen Einstieg in die Traceanalyse und
dient dazu, den Trace nach unterschiedlichen Profilen sortiert darzustellen. Folgende Profile stehen zur Auswahl:
왘 Trace-Ereignisse: Anzeige ausgewählter Anweisungen
왘 Verarbeitungsblöcke (Methoden, Funktionsbausteine etc.)
Abbildung 8.12 Transaktion SAT – Profil »Trace-Ereignisse«
Sicht »Hitliste«
Der ABAP Trace, bzw. der in der Profil-Sicht gefilterte Teil davon,
wird in der Hitliste dargestellt (siehe Abbildung 8.13).
왘 interne Tabellen (READ, LOOP AT, …)
왘 Datenzugriffe intern (Tabellenpuffer, native SQL)
왘 Datenzugriffe extern (OPEN SQL)
왘 Pakete: Anweisungen, nach Paketen gegliedert
왘 Komponenten: Gliederung nach SAP-Softwarekomponenten
왘 Programme: Anweisung gegliedert nach:
왘 Programmen
Abbildung 8.13 Transaktion SAT – Profil »Hitliste«
왘 Funktionsgruppen
Folgende Informationen werden hier angezeigt:
왘 Klassen
왘 Treffer: Anzahl der Aufrufe der Anweisung/des Ereignisses
왘 Brutto [μsec]/[%]: absolute und relative Bruttozeit
284
285
8.2
8
Werkzeuge für die Performanceanalyse
왘 Netto [μsec]/[%]: absolute und relative Nettozeit
왘 Anweisung / Ereignis
왘 Gerufenes Programm
왘 Rufendes Programm
Die Hitliste ist zunächst nach Nettozeiten sortiert, kann für die Auswertung aber nach beliebigen Spalten sortiert werden. Durch einen
Doppelklick auf einen Eintrag wird der entsprechende Programmteil
im ABAP Editor dargestellt (und mit der Zurück-Taste ((F3)) kommen Sie wieder in die Transaktion SAT).
Sicht »Datenbanktabellen«
Diese Sicht zeigt eine Übersicht der verwendeten Tabellen und Zeiten, die auf diesen Tabellen verbraucht wurden. Im Detail sind dies:
Dynamische Prüfungen und Traces
8.2
zusammen mit Brutto- und Nettozeiten dargestellt. Falls in der Messvariante aktiviert, wird auch der Speicherverbrauch angezeigt. Es
gibt die Möglichkeit, einzelne Verarbeitungsblöcke farblich hervorzuheben, wenn z. B. ein Verarbeitungsblock für mehr als 5 % der
Brutto- oder Nettozeit verantwortlich ist oder der Speicherbedarf
ansteigt. Die Schwellenwerte können dabei eingestellt werden.
Sicht »Aufrufhierarchie«
Zusätzlich zur Aufrufreihenfolge von Verarbeitungsblöcken zeigt die
Sicht Aufrufhierarchie sämtliche aufgezeichneten Ereignisse in der
richtigen Reihenfolge. Für jedes Ereignis gibt es je einen Eintrag zu
Beginn und am Ende des Ereignisses. Angezeigt werden hier ebenfalls Brutto- und Nettozeiten und, falls aktiviert, auch der Speicherverbrauch.
왘 Tabellenname
왘 Zugriffsart: Open SQL oder natives SQL
Aufzeichnung und Auswertung mit dem ABAP Profiler
왘 Anzahl der Zugriffe
Die ABAP-Laufzeitanalyse kann auch aus den ABAP Development
Tools (ADT, ABAP in Eclipse, siehe Abschnitt 2.1, »Der ABAPAnwendungsserver im Überblick«) heraus aufgezeichnet und analysiert werden. Der Trace wird dabei analog zur Aufzeichnung mit der
Transaktion SAT erstellt. Zunächst definieren Sie eine Messvariante
und führen anschließend die Laufzeitanalyse innerhalb der ABAPPerspektive aus.
왘 Bruttozeit
왘 Pufferung: ein, aus
왘 Pufferungsart: Einzelsatz-, generisch oder vollständig gepuffert
왘 Tabellenart: transparente Tabelle, View
왘 Kurzbeschreibung
1. Öffnen Sie das Dropdown-Menü am Icon Profile.
Sicht »Zeiten«
Ähnlich wie in der Hitliste werden hier die Zeiten einzelner Anweisungen angezeigt. Zusätzlich gibt es noch einen Experten-Modus
,
der die Zeiten sehr detailliert pro Anweisung und nach Benutzerund Systemzeit getrennt darstellt:
왘 Zeit im Verarbeitungsblock
Messvariante im
ABAP Profiler
definieren
2. Wählen Sie Profile Configurations…
3. Wechseln Sie zum Tab Tracing.
4. Setzen Sie die gewünschten Traceeinstellungen.
Der Trace kann jetzt über den Button Profile gestartet werden.
왘 Zeit in der Datenbankschnittstelle
Die Auswertung des ABAP Traces erfolgt in der Perspektive ABAP
Profiling.
왘 Zeit auf internen Tabellen
1. Wechseln Sie zur Sicht ABAP Traces.
왘 Zeit in der Dynproverarbeitung
2. Aktualisieren Sie die Traceliste Ihres Projekts.
Sicht »Verarbeitungsblöcke«
3. Starten Sie mit einem Doppelklick auf den Trace die Auswertung.
Die Sicht Verarbeitungsblöcke steht nur bei nicht aggregierter
Aufzeichnung zur Verfügung. Hier wird die Aufrufreihenfolge und
-hierarchie von Verarbeitungsblöcken (Modularisierungseinheiten)
Bei einem aggregierten Trace stehen die Karteireiter Overview, Hitlist und Database Accesses mit der gleichen Funktionalität wie in
286
ABAP Trace
auswerten
287
8
Werkzeuge für die Performanceanalyse
der Transaktion SAT zur Verfügung. Bei einem nicht aggregiert aufgezeichneten Trace gibt es außerdem noch die Reiter Call Tree und
Call Timeline. Der Call Tree entspricht den Verarbeitungsblöcken
in der Transaktion SAT. Die Call Timeline dagegen ist eine Sicht, die
es so nicht in der Transaktion SAT gibt. Sie stellt die Aufrufhierarchie
im Gegensatz zur Transaktion SAT grafisch dar und zeigt damit
anschaulich den zeitlichen Programmablauf (siehe Abbildung 8.14).
Dynamische Prüfungen und Traces
8.2
Die Transaktion ST12 wird mit dem Plug-in Service Tools for Applications (ST-A/PI) ausgeliefert und daher nicht offiziell als Teil des Standardprodukts unterstützt und ist nur in Englisch verfügbar. SAP-Hinweis 69455 beschreibt die Installation des Plug-ins.
Eine Einführung in die Bedienung der Transaktion ST12 finden Sie in
SAP-Hinweis 755977. Eine ausführlichere Beschreibung der Funktionen gibt es im SAP Community Network unter: http://wiki.scn.sap.
com/wiki/display/ABAP/Single+Transaction+Analysis.
In diesem Wiki und den dort aufgeführten Blogs werden die verschiedenen Traceszenarien beschrieben.
Im Vergleich zu den einzelnen Transaktionen SAT und ST05 bietet
die Transaktion ST12 ein paar nützliche Erweiterungen, die wir im
Folgenden beschreiben.
Zentrale Administration der Traces
Traces werden zentral über eine Oberfläche gestartet und gestoppt
und lassen sich damit einfacher bedienen. Die Traceergebnisse und
Einzelsatzstatistiken werden in der Datenbank gespeichert (Transaktion ST05, Daten in aggregierter Form) und stehen dauerhaft zur
Verfügung.
Integration von ABAP- und SQL-Trace-Ergebnissen
Abbildung 8.14 ABAP Profiler – Call Timeline
8.2.4
Single Activity Trace (ST12)
Die in den vorigen Abschnitten beschriebenen Werkzeuge Laufzeitstatistiken (STAD), Performance Trace (ST05) und Laufzeitanalyse
(SAT) werden in der Praxis häufig gemeinsam eingesetzt, um alle
Laufzeitinformationen eines Programms, sowohl auf der Datenbank
als auch in ABAP, zu bestimmen. Dafür wurde die Single Transaction
Analysis (Transaktion ST12) entwickelt, ein Werkzeug, das ursprünglich nur vom SAP-Support in der Servicelieferung eingesetzt wurde.
288
Aus dem zentralen ABAP Trace heraus können Sie bei SQL-Anweisungen in die entsprechende SQL-Trace-Aufzeichnung wechseln und
haben damit Zugriff auf Detailinformationen des SQL Traces, wie
z. B. den SQL-Ausführungsplan oder die Anzahl identischer Datensätze.
Verknüpfung mit Ergebnissen des Code Inspectors (statische Prüfung)
Für einen aufgezeichneten ABAP Trace können Sie aus der Transaktion ST12 heraus eine Code-Inspector-Prüfung starten. Die Ergebnisse werden für die geprüften Anweisungen im ABAP Trace dargestellt und bieten damit eine einfach zu nutzende Hilfe bei der
Programmoptimierung. Abbildung 8.15 zeigt beispielhaft eine solche Meldung. Die Code-Inspector-Prüfung kann optional über das
Menü Show/Hide 폷 Code Inspector Checks aktiviert werden.
289
ST12 im Vergleich
zu SAT und ST05
8
Werkzeuge für die Performanceanalyse
Dynamische Prüfungen und Traces
8.2
Abbildung 8.15 Integration des Code Inspectors in Transaktion ST12
Integration der Statistiksätze (STAD)
Nach Aufzeichnung der Messung werden von der Transaktion ST12
automatisch zugehörige Statistiksätze zusammen mit dem Trace
abgespeichert. Diese können später mit dem Trace ausgewertet werden.
Abbildung 8.16 Die Aufrufhierarchie in der Transaktion ST12
Automatischer Start von Folgetraces
Erweiterte Laufzeitinformationen: Time/Execution und
Time/Record
Für Anweisungen auf interne und Datenbanktabellen lassen sich
durchschnittliche Zugriffszeiten einblenden:
왘 Interne Tabellen: Time/Execution
Für Batchprozesse, die länger als die maximale Tracezeit (4294 s)
laufen und getract werden sollen, können Folgetraces eingeplant
werden. Diese werden automatisch mit Ende des Vorgängertraces
gestartet. Es handelt sich hierbei jeweils um eigenständige Traceaufzeichnungen.
왘 Datenbanktabellen: Time/Execution und Time/Record
Die Informationen lassen sich über das Menü Show/Hide 폷 Time per
Record or Exec einblenden.
Aufrufhierarchie auch bei aggregierter Traceaufzeichnung verfügbar
Um die Aufrufhierarchie einzelner Anweisungen anzeigen zu können, muss ein nicht aggregierter ABAP Trace aufgezeichnet werden,
was in der Transaktion ST12 aus Performancegründen nicht möglich
ist. Die Transaktion kann allerdings aus aggregierten Traceaufzeichnungen eine wahrscheinliche Aufrufhierarchie bestimmen, die in den
meisten Fällen der tatsächlichen entspricht. Abbildung 8.16 zeigt die
Aufrufhierarchie einer DELETE-Anweisung, die über die Buttons
ein- bzw.
ausgeschaltet werden kann. Zur besseren Lesbarkeit
können Sie die nicht zur Aufrufhierarchie gehörenden Zeilen über
den Button
ausblenden.
290
8.2.5
SQL Monitor (SQLM)
Die Grundidee des SQL Monitors ist es, Laufzeitinformationen zu
SQL-Anweisungen im Datenbankinterface DBI zu aggregieren und
zu persistieren.
Im Gegensatz zum SQL-Cache der Datenbank, der weitere datenbankspezifische Informationen zur SQL-Anweisung, wie etwa die
Anzahl der gelesenen Seiten oder die benötigte Zeit für I/O oder CPU
und den Ausführungsplan (Execution Plan) bietet, werden im SQL
Monitor die Daten mit weiteren Informationen zum ABAP-Programm und dessen Laufzeit und der Aufrufkontext, in dem die
Anweisung ausgeführt wurde, festgehalten. Diese beiden Datenquellen ergänzen sich also und bieten jeweils eigene Zusatzinformationen zu SQL-Anweisungen:
왘 der SQL Monitor im Kontext zum ABAP-Programm
왘 der SQL-Cache im Kontext zur Datenbank und SQL-Ausführung
291
Abgrenzung zum
SQL-Cache der
Datenbank
8
Werkzeuge für die Performanceanalyse
Verfügbarkeit des SQL Monitors
Beim SQL Monitor handelt es sich um ein relativ neues Werkzeug, das seit
dem SAP-NetWeaver-Release 7.02 (mit Kernel 7.21) zur Verfügung steht.
Beachten Sie dazu die SAP-Hinweise 1855676, 1855676 und 1824769.
Dynamische Prüfungen und Traces
tabelle geschrieben. Nach ca. einer Stunde stehen sie zur Auswertung in der Transaktion SQLM bereit. Die Daten werden dabei über
einen Hintergrundjob bereitgestellt, um die Laufzeitauswirkungen
dieser Messungen minimal zu halten.
Aufwand für SQL Monitor
Aufzeichnung aktivieren
Der SQL Monitor wird über die Transaktion SQLM aktiviert. Hier
können Sie den SQL Monitor auf allen oder nur bestimmten Applikationsservern aktivieren und den Zeitraum festlegen (standardmäßig eine Woche). In Abbildung 8.17 sehen Sie den Einstiegsbildschirm der Transaktion SQLM nach der Aktivierung.
Der SQL Monitor ist bei SAP und vielen Kunden in großen produktiven
Systemen rund um die Uhr aktiv, ohne zu Beeinträchtigungen zu führen.
Der Aufwand für dieses Monitoring kann vernachlässigt werden.
Daten auswerten
Um die Daten des SQL Monitors auszuwerten, klicken Sie auf Daten
anzeigen (siehe Abbildung 8.17). Sie erhalten dann eine Selektionsmaske, wie sie in Abbildung 8.18 gezeigt ist.
Abbildung 8.17 SQL Monitor nach Aktivierung
Nach der Aktivierung werden für jede ausgeführte SQL-Anweisung
Daten gesammelt und aggregiert. Die Datensammlung geschieht im
Hauptspeicher, und die Daten werden asynchron in eine Datenbank-
292
Abbildung 8.18 SQL Monitor – Selektionsmaske
293
8.2
8
Werkzeuge für die Performanceanalyse
Wir beschreiben Ihnen nun die wichtigsten Einstellungen und Filteroptionen:
Filtermöglichkeiten
왘 Im Bereich Objekte können Sie auf ABAP-Entwicklungsobjekte
filtern.
왘 Im Bereich Anfragen können Sie auf Hauptprogramme filtern,
dabei handelt es sich um die ersten Einträge im ABAP-Call-Stack
(also um einen Report, eine Transaktion, eine URL, …).
왘 Im Bereich Tabellen können Sie nach Tabellen filtern.
왘 Bei der Aggregation stellen Sie ein, ob die SQL-Anweisungen
ohne Aggregation (Keine), Nach der Quelltextposition oder der
Anfrage (Hauptprogram) aggregiert dargestellt werden sollen.
왘 Im Bereich Anordnen nach können Sie die Sortierung der Ausgabe
nach verschiedenen Kategorien einstellen und diese limitieren.
왘 Mit der Option Technische Datensätze anzeigen werden auch
SQL-Anweisungen dargestellt, die nicht direkt aus dem ABAP-Programm, sondern vom SAP-Kernel stammen (wie z. B. das Laden
gepufferter Tabellen).
Im Folgenden beschreiben wir Ihnen detailliert, wie Sie ein ABAPProgramm mit dem SQL Monitor analysieren können. Anschließend
gehen wir noch kurz auf weitere Analysemöglichkeiten mit dem SQL
Monitor ein.
Dynamische Prüfungen und Traces
Unterschied zwischen Anfrage und Objekt
Im SQL Monitor unterscheiden wir die Selektion nach einem Objekt
(ABAP-Entwicklungsobjekt wie ein Report, eine Klasse usw.) und einer
Anfrage (Einstiegspunkt in eine Aufrufhierarchie, wie z. B. ein Report,
eine Transaktion, ein Hintergrundjob usw.).
Wenn Sie eine Selektion nach Objekt vornehmen, werden nur SQLAnweisungen angezeigt, die direkt in diesem Entwicklungsobjekt stehen.
Beispiel: Sie sehen alle SQL-Anweisungen, die im ABAP-Report vorkommen. SQL-Anweisungen, die in einem Funktionsbaustein ausgeführt werden, der von diesem Report aufgerufen wird, werden nicht angezeigt.
Wenn Sie eine Selektion nach Anfrage vornehmen, werden alle SQLAnweisungen, die innerhalb und unterhalb des Objekts vorkommen,
angezeigt, das heißt in allen von diesem Objekt aufgerufenen Modularisierungseinheiten wie Funktionsbausteinen und Methoden usw. Beispiel:
Sie sehen alle SQL-Anweisungen, die in einem ABAP-Report vorkommen,
und alle SQL-Anweisungen, die in Funktionsbausteinen, Methoden usw.
ausgeführt werden, die von diesem Report aufgerufen werden.
Wir empfehlen Ihnen daher, die Suche nach Anfrage zu aggregieren, um
alle SQL-Anweisungen innerhalb und unterhalb der Anwendung zu
sehen, die Sie analysieren wollen.
Wenn Sie die Selektion nach Anfrage aggregiert ausführen, erhalten
Sie zunächst eine Zeile mit aggregierten Werten (siehe Abbildung
8.19). Diese Liste enthält die in Tabelle 8.8 beschriebenen Spalten.
Spalte
Beschreibung
Analyse eines ABAP-Programms
DB-Zeit
Um die teuersten SQL-Anweisungen in einem bestimmten ABAPProgramm zu analysieren, können Sie wie folgt vorgehen:
gesamte Datenbankzeit der Anwendung seit Aktivierung
des SQL Monitors
Gesamtzeit
gesamte Laufzeit der Anwendung seit Aktivierung des SQL
Monitors
DB-Zt/GZt
Anteil der Datenbankzeit von der Gesamtzeit in Prozent
Ges.DBAusf
왘 Sortieren Sie nach Gesamte DB-Ausführungszeit
Summe der ausgeführten SQL-Anweisungen in dieser
Anwendung
Sätze
왘 Führen Sie die Selektion aus.
Summe aller gelesenen Datensätze für diese Anwendung
Mittl.DB-Z
durchschnittliche Laufzeit aller ausgeführten SQLAnweisungen
왘 Geben Sie das zu untersuchende Programm im Bereich der
Anfragen an.
왘 Wählen Sie bei der Aggregation Nach Anfrage aus.
Tabelle 8.8 Angezeigte Spalten bei Selektion nach Anfrage
Abbildung 8.19 SQL Monitor – nach Anfrage aggregiert
294
8.2
295
Zusammenfassung
pro Anfrage
8
Werkzeuge für die Performanceanalyse
Spalte
Beschreibung
Sessions
Anzahl der Ausführungen für diese Anfrage (Transaktion,
Report, Hintergrundjob usw.). Bei RFC-Bausteinen handelt
es sich um die Anzahl der Aufrufe, bei denen eine RFC-Verbindung geöffnet werden musste; Aufrufe innerhalb einer
geöffneten RFC-Verbindung werden nicht gezählt.
Anfragetyp
SQL-Profil
Art der Anfrage (Transaktion, Report, Hintergrundjob
usw.). Von hier aus können Sie direkt zum Objekt in der
Entwicklungsumgebung navigieren.
Dynamische Prüfungen und Traces
Bei diesem SQL-Profil handelt es sich im Prinzip um eine ähnliche
Darstellung wie bei der Liste der strukturgleichen Anweisungen im
SQL Trace der Transaktion ST05. Sie sehen hier, welche SQL-Anweisungen den größten Teil der Datenbankzeit ausmachen.
In Tabelle 8.9 gehen wir auf die wichtigsten Spalten dieser Ansicht ein.
Spalte
Beschreibung
DB-Zeit
gesamte Datenbankzeit der SQL-Anweisung seit
Aktivierung des SQL Monitors
DB-Zeit [%]
Zeitanteil dieser SQL-Anweisung an der gesamten
Datenbankzeit
DB-Zt/GZt
Zeitanteil dieser SQL-Anweisung an der gesamten
Antwortzeit
DB-Ausfüh.
Summe der Ausführungen dieser SQL-Anweisung
DB-Ausf [%]
Anteil der Ausführungen dieser SQL-Anweisung an
den gesamten Ausführungen der Anwendung
Sätze
Summe aller verarbeiteten Datensätze dieser
SQL-Anweisung
Sätze [%]
Anteil der verarbeiteten Datensätze dieser
SQL-Anweisung an den insgesamt verarbeiteten
Datensätze der Anwendung
Tabelle 8.8 Angezeigte Spalten bei Selektion nach Anfrage (Forts.)
Mittl.DB-Z
durchschnittliche Antwortzeit dieser SQLAnweisung
Wenn Sie auf die Spalte DB-Anweis. klicken, gelangen Sie auf die
nächste Ebene, auf der alle SQL-Anweisungen dieser Anwendung
aufgelistet sind (siehe Abbildung 8.20).
Tabellennamen
Name der Tabellen oder Views, auf die sich die
SQL-Anweisung bezieht. Bei Joins werden die
Tabellen kommasepariert gelistet.
SQL-Operationstyp
Typ der SQL-Anweisung, wie SELECT, INSERT,
UPDATE, DELETE, SELECT (FAE), Load Buffer
(Tabellenpuffer), Native SQL usw.
ABAP-Quelltextfragment
Text der SQL-Anweisung im ABAP-Programm
Geändert
Kennzeichen, ob die SQL-Anweisung oder das
Programm seit Beginn der Aufzeichnung geändert
wurde
Int.Sess.
Anzahl der Sessions (Anmeldungen, interne Modi),
in denen die SQL-Anweisung ausgeführt wurde
Ausf/Sess.
Anzahl der Ausführungen in einer Session
EinstPunkt
erster Eintrag in der ABAP-Aufrufhierarchie
DB-Anweis.
Anzahl der unterschiedlichen SQL-Anweisungen in der
Anwendung (innerhalb und unterhalb, wenn nach Anfrage
selektiert wurde, nur innerhalb, wenn nach Objekt selektiert wurde). Bei einem Doppelklick navigieren Sie zu der
detaillierten Liste dieser SQL-Anweisungen.
Max.DBZeit/
Min.DBZeit/
DB-AbwZeit
Zeit für die langsamste/schnellste SQL-Anweisung in der
Anwendung; Standardabweichung der Laufzeit
Max.Sätze/
Min.Sätze/
MWe.Sätze/
AbweiSätze
maximale, minimale, durchschnittliche Anzahl und Standardabweichung der verarbeiteten Datensätze für die
SQL-Anweisungen in der Anwendung
Abbildung 8.20 SQL Monitor – Liste der SQL-Anweisungen für eine Anfrage
Tabelle 8.9 Angezeigte Spalten bei DB-Anweisungen (SQL-Profil einer
Anfrage)
296
297
8.2
8
Werkzeuge für die Performanceanalyse
Dynamische Prüfungen und Traces
Spalte
Beschreibung
Max.DBZeit/
Min.DBZeit/
DB-AbwZeit
langsamste/schnellste Zeit und Standardabweichung für diese SQL-Anweisung
Max.Sätze/
Min.Sätze/
MWe.Sätze/
AbweiSätze
maximale, minimale, durchschnittliche Anzahl und
Standardabweichung der verarbeiteten Datensätze
für diese SQL-Anweisung
Tabelle 8.9 Angezeigte Spalten bei DB-Anweisungen (SQL-Profil einer
Anfrage) (Forts.)
Schneller Überblick über typische Probleme bei Datenbankzugriffen
Mit der hier vorgestellten Analysemethode können Sie recht schnell und
komfortabel (ohne, dass Sie einen Trace erstellen müssen) die typischen
Probleme von vielen verarbeiteten Datensätzen (siehe TBD), vielen ausgeführten SQL-Anweisungen (siehe TBD) und hohe Zeiten pro Ausführung/
Datensatz (siehe TBD) erkennen. Im SQL Monitor können Sie also schnell
sehen, ob solche Probleme vorliegen. Um das Problem der identischen
SQL-Anweisungen zu erkennen, brauchen Sie allerdings den SQL Trace
(siehe Abschnitt 8.2.2, »Performance Trace (ST05)«). Für die anderen Probleme hängt dann vom konkreten Fall ab, ob eine Analyse des Quelltextes
zur Problembehebung genügt oder ob ein weiterer SQL Trace mit weiteren Daten, wie z. B. Parameterwerten oder Aufrufhierarchien, erstellt
werden muss, um die notwendigen Daten für die Problemlösung zu bekommen.
Weitere Analysemöglichkeiten
Mit dem SQL Monitor können Sie neben der Analyse eines ABAPProgramms auch noch weitere Analysen vornehmen. Solche Analysen werden üblicherweise von Systemadministratoren oder Qualitätsmanagern durchgeführt, da sie statt nur einer Anwendung das
gesamte System oder größere Entwicklungsbereiche betrachten. Sie
haben hier folgende Möglichkeiten:
왘 Analyse teurer SQL-Anweisungen in einem bestimmten Entwicklungsobjekt (Report, Transaktion, Paket, …). Füllen Sie dazu die
entsprechenden Filter bei Objekte aus.
왘 Systemweite Analyse teurer SQL-Anweisungen. Wählen Sie dazu
bei der Aggregation, je nachdem, in welcher Aggregation Sie die
Daten betrachten wollen, Nach Quelltextpositon oder Keine.
298
Wenn Sie keine Aggregation gewählt haben, erhalten Sie je Aufrufer (erster Eintrag in der Aufrufhierarchie) eine Zeile. Diese können aber auch von der Aggregation nach Quelltextposition in die
nicht aggregierte Liste verzweigen (Drill-down).
왘 Systemweite Analyse von Zugriffen auf eine bestimmte Tabelle.
Füllen Sie dazu die entsprechenden Filter bei Tabellen.
왘 Systemweite Analyse der teuersten Prozesse (Anfragen/Hauptprogramme). Wählen Sie bei der Aggregation Nach Anfrage, und
sortieren Sie z. B. nach Gesamte DB-Ausführungszeit.
8.2.6
Laufzeitprüfungs-Monitor (SRTCM)
Mit diesem Monitor können Sie bestimmte Prüfungen aktivieren,
die während der Laufzeit von ABAP-Programmen durchgeführt werden. Anschließend können Sie die Ergebnisse dieser Prüfungen analysieren.
Die Transaktion SRTCM beinhaltet im Moment die folgenden beiden
Prüfungen:
왘 Leere Tabelle in der Klausel FOR ALL ENTRIES
Diese Prüfung zeichnet alle Ausführungen von SELECT-Anweisungen auf, bei denen die interne Tabelle der FOR ALL ENTRIES-Klausel
leer ist. Mit dieser Prüfung können Sie Probleme identifizieren,
bei denen zu viele Datensätze von der Datenbank gelesen werden
(siehe Abschnitt 7.1.1, »Verarbeitung großer Datenmengen«).
왘 ORDER BY oder SORT fehlt nach SELECT
Diese Prüfung zeichnet alle Ausführungen von SELECT-Anweisungen ohne ORDER BY oder nachfolgende SORT-Anweisung auf, bei
denen die interne Tabelle anschließend eine Sortierung erfordert.
Dies ist z. B. der Fall, wenn die Anweisung READ .. BINARY SEARCH
verwendet wird, aber auch bei anderen Anweisungen.
Im Folgenden zeigen wir Ihnen, wie Sie die Datenaufzeichnung aktivieren und anschließend die Daten auswerten können.
Monitor aktivieren
Nachdem Sie die Transaktion SRTCM gestartet haben, erhalten Sie
einen Überblick über den Status der verfügbaren Prüfungen (siehe
299
Prüfungen
8.2
8
Werkzeuge für die Performanceanalyse
Kombinierte Auswertung statischer und dynamischer Prüfungen (SWLT)
Abbildung 8.21). Sie sehen dort den Aktivierungsstatus und weitere
Informationen zu den zwei Prüfungen. Über den Button Information können Sie die Dokumentation zur Prüfung aufrufen. Um eine
Prüfung zu aktivieren, klicken Sie auf Global aktivieren. Im folgenden Popup-Menü geben Sie den Zeitpunkt an, an dem die Prüfung
wieder deaktiviert werden soll.
Abbildung 8.22 Transaktion SRTCM – Ergebnisse auswählen
Abbildung 8.21 SRTCM – Übersicht
Abbildung 8.23 Transaktion SRTCM – Ergebnisse anzeigen
Sie können die Prüfung auch nur auf ausgewählten Applikationsservern aktivieren, indem Sie die entsprechende Drucktaste wählen.
Daten auswerten
Um die Daten auszuwerten, klicken Sie auf Ergebnisse anzeigen
(siehe Abbildung 8.21). Anschließend wählen Sie die gewünschte
Prüfung im Bereich Laufzeitprüfungsauswahl aus und wählen Ergebnisse anzeigen (siehe Abbildung 8.22). Alternativ können Sie die
Transaktion SRTCMD aufrufen, um die Daten direkt zu selektieren.
Im Ergebnis sehen Sie dann eine Liste der Prüfergebnisse (siehe
Abbildung 8.23). Mit einem Klick auf den Link in den Spalten
Include und Incl.Zeile können Sie direkt zum ABAP-Quelltext navigieren. Die Spalte Geändert zeigt an, ob der ABAP-Quelltext in der
Zeit zwischen der Prüfung und der Auswertung geändert wurde.
300
8.3
Kombinierte Auswertung statischer und
dynamischer Prüfungen (SWLT)
Die SQL Performance Tuning Worklist (SWLT) ist seit dem Release
SAP NetWeaver AS ABAP 7.4 verfügbar. Mit diesem Werkzeug können Sie Daten aus einer statischen Codeanalyse mit Laufzeitmessungen kombinieren. Dies erlaubt Ihnen, schnell zu erkennen, wo Optimierungspotenzial vorhanden und eine Performanceoptimierung am
zielführendsten ist.
Als statische Datenquellen stehen der Code Inspector (SCI, siehe
Abschnitt 5.1, »Qualitätssicherung mit dem Code Inspector«) oder
das ABAP Test Cockpit (ATC, siehe Abschnitt 5.2, »Qualitätssicherung mit dem ABAP Test Cockpit«) zur Verfügung. An dynamischen
Datenquellen stehen der SQL Monitor (SQLM, siehe Abschnitt 8.2.5,
»SQL Monitor (SQLM)«) und der Coverage Analyzer (SCOV) zur Ver-
301
Datenquellen
8.3
8
Werkzeuge für die Performanceanalyse
Kombinierte Auswertung statischer und dynamischer Prüfungen (SWLT)
fügung. Der Coverage Analyzer liefert die Anzahl der Ausführungen
der Verarbeitungsblöcke. Diese liefern zusätzliche Laufzeitinformationen und können genutzt werden, wenn keine SQL-Monitor-Daten
verfügbar sind.
Aus den verschiedenen Kombinationsmöglichkeiten zeigen wir
Ihnen hier die Verbindung von Code-Inspector- und SQLM-Datenquellen. Dazu gehen Sie wie folgt vor:
SCI- und SQLMDaten verknüpfen
왘 Auf der Registerkarte Allgemein nehmen Sie keine Einschränkungen oder Änderungen vor.
왘 Auf der Registerkarte Statische Prüfungen setzen Sie den Haken
bei Daten der statischen Prüfungen verwenden. Anschließend
wählen Sie eine vorher ausgeführte Code-Inspector- oder ABAPTest-Cockpit-(ATC-)Prüfung aus. Diese kann sowohl aus dem lokalen als auch aus einem entfernten System (über das Feld RFC-Destination) verwendet werden.
Im oberen Bereich des Bildschirms werden die Daten aus dem SQL
Monitor und die entsprechenden Ergebnisse der Code-InspectorPrüfung (beides aggregiert nach Aufrufstelle) angezeigt, siehe Abbildung 8.24 rechts oben. Ein Klick auf das Feld Include-Name führt
Sie direkt zur Aufrufstelle der SQL-Anweisung. Wenn Sie eine Zeile
aus dieser Ergebnisübersicht doppelklicken, erhalten Sie unten links
die SQL-Monitor-Ergebnisse (nicht aggregiert). Ein Klick auf Anfrageeinstiegspkt oder Tabellennamen führt Sie zum Hauptprogramm
oder DDIC. Im rechten Bereich werden die Code-Inspector-Ergebnisse ebenfalls nicht aggregiert dargestellt. Über das Feld Zusatzinformationen kommen Sie zu den Ergebnissen der Code-InspectorPrüfung, wie z. B. der Aufrufhierarchie bei einer SQL-Anweisung in
Schleifen.
Durch die Kombination statischer und dynamische Prüfungen bieten
sich somit effizientere Auswertemöglichkeiten.
왘 Auf der Registerkarte SQL Monitor setzen Sie den Haken bei SQLMonitor-Daten verwenden. Zunächst muss dazu ein SQL-Monitor-Snapshot im System erstellt werden. Als Datenquelle können
Sie das lokale oder ein per RFC verbundenes entferntes System
verwenden. Zusätzlich haben Sie noch die Möglichkeit, einen
Snapshot per Dateiimport zu erstellen.
왘 Führen Sie die Analyse über das Symbol
aus.
Das Ergebnis wird angezeigt (siehe Abbildung 8.24).
Abbildung 8.24 Transaktion SWLT – Ergebnis
302
303
8.3
Inhalt
Einleitung ..................................................................................
15
TEIL I ABAP – gestern, heute und morgen
1
Qualität, Performance und Sicherheit in der
aktuellen Softwareentwicklung .............................. 23
1.1
1.2
1.3
2
Motivation .............................................................
1.1.1
Dimensionen von Qualität .........................
1.1.2
Lebenszyklus von Anwendungen ...............
1.1.3
Ursachen und Auswirkungen von
Qualitätsproblemen ...................................
1.1.4
Qualitätsmanagement und
Entwicklungsprozess ..................................
Entwicklung im Kontext von SAP-Anwendungen ....
1.2.1
Entwicklung in SAP-Landschaften ..............
1.2.2
Standardkomponenten ..............................
1.2.3
Softwareaktualisierungen und
Plattformänderungen .................................
SAP-Produkte im Wandel der Zeit ..........................
1.3.1
Produkte und Releases im Überblick ..........
1.3.2
Auswirkungen durch Mobile, Cloud und
In-Memory ................................................
24
25
27
29
31
34
35
38
39
41
43
45
Anwendungsentwicklung mit ABAP in
der Praxis ................................................................. 49
2.1
2.2
Der ABAP-Anwendungsserver im Überblick ............
2.1.1
Serverinfrastruktur .....................................
2.1.2
Entwicklungsinfrastruktur ..........................
2.1.3
Wichtige Elemente der ABAPProgrammierung ........................................
Modernes ABAP-Anwendungsdesign ......................
2.2.1
Architektur-Blaupause ...............................
2.2.2
SAP-Investitionen und Umgang mit
Legacy-Komponenten ................................
50
50
54
58
64
66
72
7
Inhalt
Inhalt
2.3
Produkte und Serviceangebote in den Bereichen
Qualität, Performance und Sicherheit ...................... 73
4.3
TEIL II Qualität
3
ABAP-Codequalität ................................................. 79
3.1
3.2
3.3
3.4
4
80
82
85
89
93
99
102
103
109
116
120
4.4
5
5.1
5.2
121
126
130
131
131
4.2
Testbare Software entwickeln ..................................
4.1.1
Was macht testbare Software aus? .............
4.1.2
Wann und wie sollten Sie Unit-Tests
einsetzen? ..................................................
4.1.3
Wie sind Modultests aufgebaut? ................
4.1.4
Welche verschiedenen Testtechniken
gibt es? ......................................................
ABAP-Unit-Tests erstellen .......................................
4.2.1
Aufbau von ABAP-Unit-Testklassen ............
5.3
136
136
137
138
140
140
141
6
142
143
144
147
147
148
149
150
152
152
153
154
155
Werkzeuge für die Qualitätssicherung ................... 157
Modultests mit ABAP Unit ..................................... 135
4.1
8
Clean Code ..............................................................
3.1.1
Lesbarkeit ..................................................
3.1.2
Wartbarkeit ................................................
3.1.3
Änderbarkeit ..............................................
3.1.4
Erweiterbarkeit ..........................................
3.1.5
Testbarkeit .................................................
Best Practices zur Sicherung der Qualität von
ABAP-Code .............................................................
3.2.1
ABAP Objects ............................................
3.2.2
Interfaces ...................................................
3.2.3
Checkpoint-Gruppen ..................................
Fehlerhandling – gewusst wie! .................................
3.3.1
Fehlerbehandlung mit einer
Ausnahmeklasse .........................................
3.3.2
Protokollierung ..........................................
Legacy-Code ............................................................
3.4.1
Wie relevant ist Legacy-Code für
die Praxis? ..................................................
3.4.2
Softwaresanierung und Refactoring ............
4.2.2
Testklassen anlegen ...................................
4.2.3
Testmethoden implementieren ..................
4.2.4
Beispiel .....................................................
ABAP-Unit-Tests durchführen .................................
4.3.1
Einzelne Objekte prüfen ............................
4.3.2
Ausführung mit Einplanung .......................
4.3.3
Ausführung mit Abdeckungsmessung ........
4.3.4
ABAP Unit Browser ...................................
Fortgeschrittene Techniken .....................................
4.4.1
Globale Testklassen ...................................
4.4.2
Parametrisierung von Tests ........................
4.4.3
Verwendung von Test-Doubles ..................
4.4.4
Eigene Bedingungen implementieren .........
Qualitätssicherung mit dem Code Inspector ............
5.1.1
Einsatz des Code Inspectors .......................
5.1.2
Einzelprüfungen ........................................
5.1.3
Konfiguration des Code Inspectors ............
Qualitätssicherung mit dem ABAP Test Cockpit ......
5.2.1
ATC-Prüfungen als Entwickler
durchführen ..............................................
5.2.2
Nutzung des ABAP Test Cockpits als
Qualitätsmanager ......................................
5.2.3
ATC-Befreiungen .......................................
Qualitätssicherung mit ABAP in Eclipse ...................
5.3.1
Einführung in die Verwendung von
ABAP in Eclipse .........................................
5.3.2
Nützliche Funktionen für Entwickler ..........
5.3.3
Verwendung von ABAP-Unit-Tests und
ATC in Eclipse ...........................................
157
159
166
170
173
174
177
181
183
184
188
193
Prozesse und Methoden ......................................... 197
6.1
6.2
Agile Vorgehensmodelle ......................................... 200
Extreme Programming (XP) ..................................... 205
9
Inhalt
Inhalt
TEIL III Performance
7
Typische Performanceprobleme und Lösungen ...... 213
7.1
7.2
7.3
7.4
7.5
8
Zugriffe auf die Datenbank ......................................
7.1.1
Verarbeitung großer Datenmengen ............
7.1.2
Viele Ausführungen ....................................
7.1.3
Identische Datenbankzugriffe .....................
7.1.4
Probleme mit dem Zugriffspfad ..................
Zugriffe auf interne Tabellen ....................................
7.2.1
READ in Schleifen ......................................
7.2.2
Geschachtelte Schleifen ..............................
7.2.3
Sortieren in Schleifen .................................
7.2.4
COLLECT ....................................................
Zugriffe auf entfernte Systeme .................................
Verbuchung .............................................................
Programmdesign .....................................................
213
216
219
223
226
231
234
238
243
245
246
250
255
Werkzeuge für die Performanceanalyse ................. 259
8.1
8.2
8.3
9
9.2.3
Statische Prüfungen .................................................
8.1.1
Code Inspector (SCI) ..................................
Dynamische Prüfungen und Traces ..........................
8.2.1
Laufzeitstatistiken (STAD) ...........................
8.2.2
Performance Trace (ST05) ..........................
8.2.3
Laufzeitanalyse mit dem ABAP Trace/
ABAP Profiler (SAT) ....................................
8.2.4
Single Activity Trace (ST12) ........................
8.2.5
SQL Monitor (SQLM) .................................
8.2.6
Laufzeitprüfungs-Monitor (SRTCM) ............
Kombinierte Auswertung statischer und
dynamischer Prüfungen (SWLT) ...............................
259
260
263
263
269
277
288
291
299
301
Durchführung von Performanceanalysen ................ 305
9.1
9.2
Systemweite Performanceprobleme .........................
Performanceanalyse eines ABAP-Programms ...........
9.2.1
Einstieg und Voraussetzungen ....................
9.2.2
Überblick und erste Grobanalyse ................
305
307
307
308
9.2.4
Auswertung und Validierung der
Daten und Traces ...................................... 310
Weitere Analysemöglichkeiten .................. 317
10 Neue Möglichkeiten zur Performanceoptimierung
mit SAP HANA und Open SQL 7.4 .......................... 319
10.1 SAP HANA im Überblick .........................................
10.1.1 Grundlagen der HANA-Architektur ............
10.1.2 Column und Row Store .............................
10.1.3 Indexe .......................................................
10.2 Open-SQL-Programmierung für SAP HANA mit
SAP NetWeaver 7.4 ................................................
10.2.1 Goldene Regeln auf SAP HANA .................
10.2.2 Neue performancerelevante
Open-SQL-Features ...................................
10.3 Code Pushdown ......................................................
10.3.1 Techniken des Code Pushdowns ................
10.3.2 Empfehlungen zum Einsatz ........................
319
319
321
323
324
324
327
331
331
335
TEIL IV Sicherheit
11 Stellenwert von Sicherheitsaspekten in
ABAP-Programmen ................................................. 339
11.1 Klassifizierung der verschiedenen
Sicherheitsrisiken ....................................................
11.2 Typische Lösungsansätze .........................................
11.2.1 Escaping ....................................................
11.2.2 Eingabeprüfung für ganze Zahlen
(Integer) ....................................................
11.2.3 Whitelist – Definition von Festwerten ........
11.2.4 Output Encoding – Escaping ......................
11.2.5 Eingabeprüfung – Spaltennamen ................
11.2.6 Eingabeprüfung – Tabellennamen ..............
341
342
344
345
345
348
350
350
12 Schwachstellen und Schutzmaßnahmen ................. 353
12.1 SQL-Injection ......................................................... 353
12.1.1 Beispiel SQL-Injection ............................... 353
10
11
Inhalt
Inhalt
12.2
12.3
12.4
12.5
12.6
12.7
12.8
12.9
12
12.1.2 Open SQL und natives SQL ........................
12.1.3 Lösungsansätze ..........................................
Unicode-Prüfung .....................................................
12.2.1 Beispiel zu Unicode-Prüfung ......................
12.2.2 Weitere Aspekte ........................................
12.2.3 Lösungsansätze ..........................................
Directory Traversal ..................................................
12.3.1 Beispiel für ein Directory Traversal .............
12.3.2 Berechtigungsprüfung ................................
12.3.3 Lösungsansätze ..........................................
Berechtigungsprüfung ..............................................
12.4.1 Beispiel zu Berechtigungsprüfung ...............
12.4.2 Weitere Aspekte ........................................
12.4.3 Lösungsansätze ..........................................
Cross Site Scripting ..................................................
12.5.1 Beispiel für Cross Site Scripting ...................
12.5.2 Weitere mögliche Angriffspunkte ...............
12.5.3 Lösungsansätze ..........................................
Dynamischer ABAP-Quelltext ..................................
12.6.1 Beispiel zu dynamischem
ABAP-Quelltext ..........................................
12.6.2 Weitere Aspekte ........................................
12.6.3 Lösungsansätze ..........................................
Remotefähige Funktionsbausteine ...........................
12.7.1 Beispiel für remotefähige
Funktionsbausteine ....................................
12.7.2 Dynamische Funktionsbausteinaufrufe
und Unified Connectivity ............................
12.7.3 Lösungsansätze ..........................................
Betriebssystemzugriffe .............................................
12.8.1 Beispiel für Betriebssystemzugriffe ..............
12.8.2 Weitere Aspekte ........................................
12.8.3 Lösungsansätze ..........................................
Weitere Sicherheitsaspekte bei der
ABAP-Entwicklung ..................................................
12.9.1 Beispiel zu weiteren Sicherheitsaspekten
bei der ABAP-Entwicklung .........................
12.9.2 Tabellenzugriffe ..........................................
12.9.3 Lösungsansätze ..........................................
358
363
366
367
369
370
372
374
376
377
381
382
382
385
392
393
394
396
398
398
401
402
404
404
408
410
413
413
415
415
420
420
421
423
13 Sicherheitsprüfungen für den ABAP-Quelltext
durchführen ............................................................. 427
13.1 Sicherheitsanalysen aus Sicht des Entwicklers ..........
13.2 Konfiguration des Code Vulnerability Analyzers ......
13.2.1 Definition von eigenen vertrauenswürdigen Datenquellen .............................
13.2.2 Hinzufügen von eigenen sicherheitskritischen Funktionsbausteinen ..................
13.2.3 Hinzufügen von eigenen Prüfungen
auf Systemvariablen ...................................
13.3 Sicherheitsanalysen aus Sicht des Qualitätsmanagements .........................................................
13.4 Integration des Code Vulnerability Analyzers
in die Entwicklungslandschaft .................................
431
436
439
440
441
441
443
TEIL V Praxistipps
14 Qualitätsaspekte in der Projektplanung
berücksichtigen ....................................................... 447
14.1 Qualitätsmanagement .............................................
14.1.1 Organisatorische Voraussetzungen ............
14.1.2 Technische Voraussetzungen .....................
14.1.3 Einführung von Qualitätsprozessen ............
14.2 Qualität messen und steuern ..................................
14.2.1 Quantitative Messungen ............................
14.2.2 Zusätzliche qualitative Messungen .............
14.2.3 Qualität steuern mithilfe von
Messungen ................................................
14.3 Empfehlungen für unterschiedliche Projekttypen ....
14.3.1 Einführungsprojekt ....................................
14.3.2 Upgrade oder Migration ............................
14.3.3 Optimierungsprojekt .................................
14.3.4 Projektentwicklung ....................................
14.3.5 Softwareübergabe .....................................
448
448
449
450
451
452
453
454
456
457
458
459
461
462
13
Inhalt
15 Empfehlungen für den Einsatz der Techniken
und Werkzeuge ....................................................... 465
15.1 Praxistipps für die Entwicklung ................................
15.1.1 Richtlinien und Konventionen ....................
15.1.2 ABAP-Programmierung ..............................
15.2 Praxistipps für den Einsatz von Werkzeugen ............
15.2.1 Entwicklungswerkzeuge .............................
15.2.2 Nutzung des ABAP Test Cockpits ...............
15.2.3 Testen mithilfe von ABAP Unit
und eCATT .................................................
15.2.4 Einsatz von Analysewerkzeugen .................
15.3 Praxistipps zum Entwicklungsprozess .......................
15.3.1 Einsatz von agilen Methoden .....................
15.3.2 Planung und Durchführung von Tests .........
15.3.3 Planung und Durchführung von
Performanceoptimierungen ........................
15.4 Top-Ten-Empfehlungen für besseres ABAP ..............
466
466
468
469
470
470
473
475
477
477
479
480
481
Die Autoren .............................................................................. 485
Index ........................................................................................ 487
14
Index
A
ABAP
Codequalität 79
Command-Injection 341
Compiler 51
Debugger 189, 477
Kommentar 467
Quelltext vergleichen 55
Schlüsselwortdokumentation 340
Sicherheit 339
Trace 54
Virtual Machine 51
Workbench 54, 175
ABAP 7.4 71, 72
ABAP Code Inspector
씮 Code Inspector
ABAP Database Connectivity 60, 334
ABAP Database Connectivity 씮 ADBC
ABAP Development Tools for SAP
NetWeaver 씮 ABAP in Eclipse
ABAP Dictionary 34, 52, 66
ABAP in Eclipse 55, 184, 450, 470
ABAP Unit 193
ABAP-Profiling 184
Core Data Services 333
Coverage Analyzer 193
Debugger 189
Navigation 187
Objekt ändern 187
Objekt anlegen 186
Objekte vergleichen 192
Projekt anlegen 186
Quick-Fix-Funktion 190
Refactoring 190, 191
Repository-Objekt öffnen 186
SAP-GUI-Integration 187
SDK 56
Sprache 184
Syntaxprüfung 192
Systembibliothek 186
Tastaturbefehle 188
Template 191
ABAP Managed Database
Procedures 331
ABAP Objects 468
ABAP Profiler 287
Call Timeline 288
ABAP Test Cockpit 56, 58, 147, 173,
432, 450, 452, 470
Ausnahmeprozess 472
Befreiung 173, 434
Befreiung beantragen 182
Befreiungsbrowser 183, 441
Ergebnisbrowser 180
Laufmonitor 179
Laufserie anlegen 178
Mastersystem 174, 470
Prüflauf 178
Satellitensystem 174, 471
Transportprüfung 173
ABAP Unit 57, 135, 452, 473
Ausnahmen 144
Automatisierung 147
Beispiel 144
debuggen 148
eigene Bedingungen 155
Ergebnisanzeige 149
Fehler werfen 144
Fehlerlevel 144
Fehlermeldung 144
globale Testklasse 152
manuelle Ausführung 147
parametrisierter Test 153
Risikostufe 143
Abdeckungsmessung 149
Anweisungsabdeckung 150
Prozedurabdeckung 150
Zweigabdeckung 150
Abdeckungsmetrik 149, 453
ADBC 334, 360
Add-on 43
agile Entwicklung 33, 200, 205, 477
agiles Manifest 200
Agilität 203
Anforderungen 201
Einfachheit 203
funktionierende Software 202
Kommunikation 202
Motivation 202
Prinzip Kunde 201
Prinzipien 201
487
Index
Index
agiles Manifest (Forts.)
Reflexion 204
Selbstorganisation 204
Tempo 203
Zusammenarbeit 202
Akzeptanztest 32, 453
ALE 60
AMDP 331
AMDP 씮 ABAP Managed Database
Procedures
Angriffsoberfläche 36, 61
Anmeldeverfahren 61
Antwortzeit 266, 308
CPU-Zeit 309
Database-Request-Zeit 310
Processing-Zeit 309
RFC- und CPIC-Zeit 310
Anwendungslog 54
Application Performance
Management 74
Application-to-Application 68
Applikationsserver 50
asynchrone Kommunikation 249
ATC 씮 ABAP Test Cockpit
AUTHORITY-CHECK 53, 383
automatisierter Test 452
B
BAdI 34
Bananenprinzip 33
Bandbreite 247
BAPI 60
BAPI_USER_CREATE1 421
Batch-Job 51, 71
Benutzbarkeit 27
Benutzeroberfläche 69
Berechtigung 381
Berechtigungsobjekt 53, 382
anlegen 386
S_C_FUNCT 423
S_DATASET 376, 414, 415
S_LOG_COM 419
S_PROGNAM 384
S_PROGRAM 384
S_RFC 412
S_TCODE 381, 386
Berechtigungsprüfung 342
Beschreibungstext 467
488
Best Practice
ABAP Objects 103
Abstraktion 105, 106, 111
aktivierbare Assertion 120
aktivierbarer Breakpoint 117
Assertion 116
Breakpoint 117
Checkpoint 116
Checkpoint-Gruppe 116, 118
Debugging 119
Denkweise 104
Design by Contract 117
Empfehlung 105
Erweiterungspunkt 114
evolutionäre Entwicklung 107
Information Hiding 107
Interface 109
Kapselung 107
Logpoint 118
objektorientierte Literatur 108
Objektorientierung 103
Praxisbeispiele 108
Problem prozedurale Programmierung 103
Spezifikation 115
Sprachbereinigung 106
stabile Software 107
Vererbung 107, 114
Zugriffspunkt 111
Betriebssystemzugriff 61, 413
Black-Box-Test 140
Blacklist 343
BRFplus 67
BSP 42, 61, 69, 392
Business Object Layer 67
Business Object Persistence
Framework 67
Business Server Pages 392
Business Server Pages 씮 BSP
Business-Add-in 34
Business-to-Business 68
C
CALL FUNCTION 406
DESTINATION 407
DESTINATION `NONE` 408
IN BACKGROUND TASK 408
IN BACKGROUND UNIT 408
CALL FUNCTION (Forts.)
STARTING IN NEW TASK 408
CALL METHOD 409
CALL TRANSACTION 384
WITHOUT AUTHORITY-CHECK 385
CDS 씮 Coredata Services
C-Funktion 421
SYSTEM 420, 421
Change and Transport Managementsystem 56
Change Management 449
ChaRM 449
cl_abap_dyn_prg
check_column_name 350
check_int_value 345
check_table_name_str 350
check_table_name_tab 351
check_whitelist_str 346, 411
check_whitelist_tab 347, 411
escape_quotes 344
escape_quotes_str 344
quote 344
quote_str 344
cl_abap_syst 423
get_client 423
get_current_program 423
get_host_name 423
get_user_name 423
cl_abap_unit_assert 143, 155
cl_bsp_api_generate 395
cl_bsp_controller, write 396
cl_bsp_element, print_string 396
cl_bsp_writer, print_string 396
cl_nwbc_server_assist, set_
response 396
Clean Code 80
Abhängigkeit 101
Abstraktionsvarianten 94
Änderbarkeit 89
anpassbarer Code 89
Anti-Pattern 90
Best Practice 80
Bezeichner 84
Design 87
Designprinzipien 90
dynamisch erweitern 88
Erweiterbarkeit 93, 96
erweitern 86
Erweiterungspunkt 87, 98
flexibler Code 94
Clean Code (Forts.)
Intuition 84
Isolation 101
iterative Entwicklung 81
Kommentar 84
Lava Flow 92
Lesbarkeit 80, 82, 83
Magic Number 91
Namenskonvention 82
Objektorientierung 93
Open-Closed-Prinzip 86
Polymorphie 95
Pretty-Print 84
Refactoring 81
Spaghetti-Coding 93
Testbarkeit 99, 100
Testobjekt 100
Verantwortung 100
Wartbarkeit 85
Wartungsarbeit 86
Clean Coder 198
Cloud 45, 47
Code Inspector 56, 147, 157,
260, 467
einsetzen 159
Einzelprüfung 166
Inspektion 165
Konfiguration 170
Meldungspriorität 170, 430, 438
Objektkollektor 163, 453
Objektmenge 161
Performanceprüfung 260
Prüfvariante 161
Code Ownership 449
Code Pushdown 331
Empfehlungen 335
Code Review 33, 427, 450, 454, 477
Code Vulnerability Analyzer 471
Code Vulnerability Analyzer 씮 CVA
Codeabdeckung 474
Code-Completion 189
Codegenerator 63
Code-Injection 398
Persistent 400
Codescanner 428
CVA 429
Code-to-Data 46
COLLECT 245
Column Store 46
Component-under-Test 138
489
Index
Index
COND 405
Coredata Services 333
Coverage Analyzer 149, 452
in Eclipse 193
Cross Site Scripting 42, 392, 395
DOM-based 395
Persistent 395
Reflected 394
Request Forgery 42
Stored 395
Customer-Exit 34
Customizing 34
CVA 436
erweitern 437
Konfiguration 436
Lizenz 437
Prüfung auf Systemvariablen 441
sicherheitskritische Funktionsbausteine 440
Solution-Manager-Integration 443
vertrauenswürdige Datenquelle 439
D
Database Client 52
Database Specific Library 52
Data-to-Code 46
Dateischnittstelle 61
Datenbank 51
Index 228
Selektivität 230
Datenbankprozedur-Proxy 334
Datenbankschnittstelle 52
Datenbanktreiber 52
Datenbankzugriff 213
Datenbank-Zugriffszeit 227
Datenfluss, Analyse 433
DBI 52
DB-Parallelisierung 336
DBSL 52
Debugger 씮 ABAP, Debugger
DELETE DATASET 373, 376
DELETE REPORT 402
Denial of Service 342
Design Pattern 99, 468
DIAG 53
Directory Traversal 342, 372
Beispiel 374
Dispatcher 51
490
Dokumentation 467
Double-Stack-System 51
Downtime 43
Drei-System-Landschaft 35
DSAG 448
Dummy 154
dynamische Programmierung 62, 468
dynamische WHERE-Bedingung 422
dynamisches Open SQL 359
E
eCATT 57, 135, 473
Testdatencontainer 475
Eclipse
Cheat Sheet 188
Code-Template 191
Debug-Perspektive 184, 190
Editoren 184
Funktionen 188
Outline-View 184
Perspektive 184
Plug-in 56
Problems-View 194
Rechtschreibprüfung 193
Update-Seite 56
Views 184
Effizienz 27
EHP 씮 Enhancement Package
Einführungsprojekt 457
Eingabeprüfung
ganze Zahl 345
Spaltenname 350
Tabellenname 350
E-Mail 61
Encoding
Cascading Style Sheets 349
HTML 349
JavaScript 349
JSON 349
URI 349
URL 349
XML 349
Enhancement Package 43
Enhancement Point 34, 469
Enqueue (Workprozess) 51
Enqueue Server 51
Enterprise Resource Planning 28
Entkopplung 65
Entscheidungslogik 67
Entwicklungsprozess 32
Entwicklungsszenario 34
Entwurfsmuster 씮 Design Pattern
Escaping 344, 428, 469
escape 396
escape_quotes 344
escape_quotes_str 344
quote 344
quote_str 344
Sicherheitsprüfung 438
EXEC SQL 362
exploratives Testen 454
Extensible Markup Language 64
Extensible Stylesheet Language Transformation 씮 XSL-Transformation
externer View 334
Extreme Programming 씮 XP
G
GENERATE SUBROUTINE POOL
398, 399
Geschäftslogik 65
Geschäftsregeln 65
Globalisierung 25
goldene Regeln 324, 483
H
Hauptspeicher 46
Hintergrundprozess 71
HTMLB 397
HTML-Business 397
design 397
forceEncode 397
HTTP 51
HTTP-Response 395
F
FAE 씮 FOR ALL ENTRIES
False Positive 428
Fehlerhandling
Application Log 127
Ausnahme auslösen 123
Ausnahmebehandlung 124, 125
Ausnahmeklasse 121
Definition der Ausnahmeklasse 123
Demo-Programm 128
Fehlererkennung 120
Fehlerwirkung 126
Funktionsbausteine 128
globale Ausnahmeklasse 122
Konzept 121
lokale Ausnahmeklasse 122
Problemklasse 128
Protokollanzeige 128
Protokollierung 126
Vorteile 126
Fehlermeldung, technische
Details 342
FILE_GET_NAME 377
FILE_VALIDATE_NAME 377
Fixture 139, 152
eCATT 475
FOR ALL ENTRIES 59, 217, 222
Framework 씮 Standardkomponente
Frontend 56
I
ICF 42, 60
ICM 51
IDE 183
IDoc 36, 60
if_bsp_writer
print 396
print_string 396
write 396
if_constraint 155
Indexdesign 228
Inline-Deklaration 357, 405
in Open SQL 399
In-Memory 45, 46
Input-Validierung 343
INSERT REPORT 398, 401
Integrationslogik 68
Integrationstest 32, 453, 474
Integrierte Entwicklungsumgebung
씮 IDE
Interface 109
interne Tabelle 231
Hash-Tabelle 232
Indextabelle 232
Laufzeitverhalten (O-Notation) 233
sortierte Tabelle 232
Standardtabelle 232
Internet 25
491
Index
Index
Internet Communication Framework
씮 ICF
Internet Communication Manager
씮 ICM
Inventur 453
ISO-Norm 26
25000 26
9000 31
iterativer Prozess 33
J
Jahr-2000-Problem 29
JavaScript Object Notation 64
Join, äußerer 328
JSON 51, 64, 70
JUnit 135
K
Kerberos 53
Kernel 51
Klasse CL_ABAP_UNIT_ASSERT 143
kollaborative Entwicklung 33
Konfiguration der RFC Verbindungen 409
kontinuierliche Integration 478
Konvention 466
Kostenreduzierung 136
KPI 451
L
Landschaft 씮 SAP-Landschaft
Lastverteilung 51
Latenz 247
LEAVE TO TRANSACTION 384
Lebenszyklus 27, 467
Legacy-Code 39, 131, 451
Änderungsprozess 134
Definition 130
Dokumentation 130
Komplexität 133
Refactoring 131, 132
Softwaresanierung 131
Struktur 133
Literal
Textfeldliteral 358
492
Literal (Forts.)
Textstringliteral 358
logische Dateinamen 379
lokale Klasse 138
LUW-Konzept 67
OS-Command-Injection 341
Output Encoding 343, 348
Outsourcing 25, 29, 47, 462
M
PAI 69
Pair Programming 33, 206
Parallelisierung 255
PBO 69
Performance 27
Performance Trace 475
Performanceanalyse 305
ABAP-Programm 307
CALL TRANSFORMATION 314
Grobanalyse 308
hohe CPU-Zeit 312
hohe Datenbankzeit 314
interne Tabelle 313
Kopierkosten interner Tabellen 314
Modularisierungseinheit 314
RFC 313
systemweite Analyse 305
Voraussetzungen 307
Wartezeit 312
Wartezeit (WAIT) 314
Werkzeuge 259
Performanceprobleme 213
Aggregat 218
ändernde Datenbankzugriffe 221
COLLECT 245
Datenselektion 256
Duplikat 218
FOR ALL ENTRIES mit leerer
Treibertabelle 217
geschachtelte Schleifen 238
geschachteltes SELECT 220
Hash-Tabelle (LOOP) 241
Hash-Tabelle (READ) 237
identische Datenbankzugriffe 223
Indextabelle 256
ineffizienter Index 231
interne Tabelle 231
kein Index 230
Parallelisierung 255
Programmdesign 222, 255
READ in Schleifen 234
RFC 246
RFC (Bandbreite) 247
Magic Number 씮 Clean Code
Mandant 59
manueller Test 452
Message Server 51
Middleware-Lösung 69
Migration 458
Mobile 45
Mocking-Framework 155
Mock-Objekt 154
Model View Controller 69
Modifikation 469
Modultest 32, 135, 474
Mylyn 55
N
Namensraum 38
Namensraumkonzept 37
natives SQL 360
ABAP Database Connectivity (ADBC)
365
EXEC SQL 365
Negativtest 140, 468, 474
O
OAuth 53
Objektmenge 173
OData 42, 70
Open Data Protocol 씮 OData
OPEN DATASET 373, 376
FILTER 413
Open SQL 46, 52, 59
7.4-Features 327
7.4-Features (SQL-Ausdrücke) 328
Datenbankunabhängigkeit 59
dynamisches 359, 363
statisches 359
Optimierungsprojekt 459
Originalsprache 467
P
Performanceprobleme (Forts.)
RFC (Latenzzeit) 248
Schnittstellendesign 256
SELECT in einer Schleife 221
Sortieren in Schleifen (SORT) 243
sortierte Tabelle (LOOP) 241
sortierte Tabelle (READ) 236
Sperren 255
Standardtabelle (COLLECT) 245
Standardtabelle (LOOP) 239
Standardtabelle (READ) 235
synchrone Kommunikation 249
synchrone Verbuchung 252
Tabellenpuffer 217
Verarbeitung großer Datenmengen 216
Verbuchungstabelle 253
viele Ausführungen 219
viele Spalten 218
viele Zeilen 216
Zugriffspfad 226
Persistent Code-Injection 400
Plan, Build, Run 456
Platform Availability Matrix 51
Positivtest 140, 474
Präfix 466
Pragma 172, 472
Pretty-Printer 466
Prinzipien professioneller Entwickler
guter Code 198
lebenslanges Lernen 198
professionell agieren 199
Selbstsicherheit 200
Verantwortung 198
Product Innovation Lifecycle 27
professioneller Code 197
professioneller Entwickler 197
Profil 53
Profilparameter, abap/dyn_abap_
log 402
Programmdesign 255
Projektart 448
Projektentwicklung 461
Projektlandschaft 35
Projektplanung 447
Projektverlauf 23
Projektziel 23
Prototyp 461, 480
Prüfvariante 173, 471
Pseudokommentar 171, 472
493
Index
Index
Q
Qualität, Definition 25
Qualitätskontrolle 31
Qualitätskriterien 451
Qualitätsmanagement 31, 447
Aufgaben 441
Voraussetzungen 448
Qualitätsmanager 472
Qualitätsplanung 31
Qualitätsprobleme 29
Qualitätsprozess 450
Qualitätsschranke 455, 471
Qualitätssicherung 31
analytische 32
Definition 31
konstruktive 32
Quelltextanalyse, statische 158
quelltextbasierte Ausnahme 171
Quelltextprüfung 158
Quelltext-Vervollständigung 189
Quelltext-Vervollständigung
씮 Code-Completion
R
Ramp-up 34
READ DATASET 374, 376
Refactoring 460
Regressionslauf 174, 472
regulärer Ausdruck 469
Remote Function Call 36, 404
interner 408
remotefähige Funktionsbausteine 404
externer 411
Reportstartberechtigung 391
Repository Browser 175
Responsive Design 45
Ressourcenprobleme 305
Retrofit 479
RFC 씮 Remote Function Call
RFC-Baustein 60
RFC-Destination 60
RFM 씮 remotefähige Funktionsbausteine
Richtigkeit 26
Rolle 53
Roundtrip Time (RTT) 248
Row Store 46
494
RTTS 62
Runtime Type Services 62, 402
S
S_DATASET 376
S_PROGRAM 384
S_TCODE 381
SAP Business Suite 44
SAP Business Warehouse 44
SAP Community Network 155
SAP Fiori 70
SAP Gateway 44, 70
SAP GUI 55, 69
SAP GUI for HTML 69
SAP HANA 46, 65, 190, 319
Architektur 319
Code Pushdown 331
Column Store 46, 321
goldene Regeln 324
Hardware 320
Index 323
Row Store 46, 321
SAP Java Connector 70
SAP NetWeaver 35, 44
7.4 44
SAP NetWeaver Application Server
ABAP 366
SAP NetWeaver Application Server,
add-on for code vulnerability
analysis 429
SAP NetWeaver Process Orchestration 69
SAP Solution Manager 37, 443,
449, 453
SAP System Landscape Governance
Board 36
SAP UI Development Toolkit für
HTML5 씮 SAPUI5
SAP-Hinweis 43
SAP-Landschaft 35, 36
SAP-Releasestrategie 43
SAPUI5 44, 55, 70
SAT 312
Aufzeichnungsoptionen 280
Schnittstelle 씮 Interface
Schwachstellentest 454
SCI 260
Screen Painter 69
Scrum 27, 451, 477
Master 451
Retrospektive 451
Sprint 451
Secure-Store-and-Forward 53
Security Assertion Markup
Language 53
Security Audit Log 389
Security-Log 54
sekundäre Datenbankverbindung 52
SELECT-Anweisung 52
Separation of Concerns 65, 468
Service Tools for Applications (Addon) 476
Servicepacks 473
SICF 61
Sicherheit 26, 339
Sicherheitsrisiken
Berechtigungsprüfung 381
Code-Injection 398
Sicherheitsrisiko 341
ABAP-Virtual-Machine-Angriff 341
berechtigungserweiternder
Angriff 341
Betriebssystemangriff 341
Dateisystemangriff 342
Datenbankangriff 341
Oberflächenangriff 341
Serververfügbarkeitsangriff 342
speicherüberschreibender Angriff 342
Sicherheitsschwachstelle finden 427
Simple Design 468
Single Sign-on 53
Smartphone 45
Smoke-Test 140, 473
SNC 53
SOAP 42
Softwareaktualisierung 39
Software-als-Service 47, 456
Softwarequalität 24
Softwareübergabe 462
SORT 243
Sperrverwaltung 51
SQL Monitor 291, 450, 475
SQL Trace 54, 269
SQL, natives 52, 60, 360
SQL-Ausdrücke 328
SQL-Injection 341, 353
SQLM 씮 SQL Monitor
SQLScript 320
SRTCM 299
Aufzeichnung aktivieren 299
Prüfungen 299
SSL 53
SSO 씮 Single Sign-on
Stakeholder 482
Standardkomponente 38
statische Prüfung 259
Code Inspector (SCI) 260
statisches Open SQL 359
Statistiksatz 54, 264, 480
Sternschema 71
Stored Procedure 362
Stub 154
SUBMIT 383
Support Package 43
SUSR_GENERATE_PASSWORD 424
SWITCH 405
SWLT 301
Auswertung 302
Datenquelle 301
SXPG Framework
SXPG_COMMAND_EXECUTE 418
SXPG_DUMMY_COMMAND_
CHECK 417
SXPG-Framework 415
sy-host 421
synchroner RFC 60
SYST 421
Systemfelder 469
sy-dbsys 469
sy-opsys 469
Systemlandschaft 35, 449
Systemlog 54
Systems of Differentiation 27
Systems of Innovation 27
Systems of Record 27
Systemtest 32
Systemtrace 385
sy-sysid 421
sy-uname 382
T
Tabellenpuffer 52
tautologischer Ausdruck 359
TCP/IP 61
Testabdeckung 149, 452
495
Index
Index
testbare Software 136
Fragenkatalog 137
Test-Double 154, 474
Dummy 154
Mock 154
Stub 154
Testen
Akzeptanztest 453
exploratives Testen 454
Integrationstest 453
Schwachstellentest 454
Testfall 138
Test-Fixture 씮 Fixture
testgetriebene Entwicklung 478
Testlauf 139
Testsuite 138
Testtour 454
Textfeldliteral 358
Textstringliteral 358
Tracevalidierung 310
Konsistenzprüfung ABAP Trace 313
Konsistenzprüfung SQL Trace 315
Transaktion
ABAP Test Cockpit 174
FILE 378
SAT 277
SAT (Aggregation) 279
SAT (Auswertungsoptionen) 282
SAT (Brutto- und Nettozeiten) 283
SAT (Messvariante) 278
SCI 160
SE80 54, 147, 174
SLIN 428
SLIN_ADMIN 436
SQLM 315
SQLM (Aufzeichnung aktivieren) 292
SQLM (Auswertung) 293
SQLM (weitere Auswertungsmöglichkeiten) 298
SRTCM (Auswertung) 300
ST01 385
ST05 269, 316
ST05 (Aufrufhierarchie) 276
ST05 (Aufzeichnung) 269
ST05 (Auswertung des SQL Traces)
271
ST05 (Enqueue Trace) 277
ST05 (Hauptsätze) 275
ST05 (HTTP-Trace) 277
496
Transaktion (Forts.)
ST05 (Identische SQL-Anweisungen)
272, 276
ST05 (Puffer Trace) 277
ST05 (RFC Trace) 277
ST05 (SQL Trace) 269
ST05 (Strukturidentische SQLAnweisungen 272
ST12 288, 312
ST12 (Aufrufhierarchie) 290
ST12 (SCI, Code-InspectorIntegration) 289
ST12 (STAD StatistiksatzIntegration) 290
ST12 und ST05 (SQL-TraceIntegration) 289
STAD 263, 307
Transaktionslogik 67
Transaktionsstartberechtigungsprüfung 391
TRANSFER 374, 376
Transport Layer Security 53
Transport Organizer 177
Transportfreigabe 172
Transportroute 56
Transportwesen 56
Verbuchung (Forts.)
lokale 251
synchrone 251
Verbuchungstypen 252
Vier-Augen-Prinzip 62, 182, 468
View 67
CDS-View 67, 470
Virus-Scan-Schnittstelle 53
V-Modell 32
W
Wasserfallmodell 32
Web Dynpro 397
Web Dynpro ABAP 38, 55, 61, 69
Webservice 36
Werkzeuge zur Performanceanalyse
ABAP Trace/ABAP Profiler
(SAT) 277
Code Inspector (SCI) 260
Laufzeitprüfungs-Monitor
(SRTCM) 299
Laufzeitstatistiken (STAD) 263
Performance Trace (ST05) 269
Single Activity Trace (ST12) 288
Werkzeuge zur Performanceanalyse
(Forts.)
SQL Monitor (SQLM) 291
SQL Performance Tuning Worklist
(SWLT) 301
White-Box-Test 140
Whitelist 343, 345, 469
Workprozess 51
X
XML 51, 64, 70
XP 205
XP-Werte
Einfachheit 205
Feedback 205
Kommunikation 205
Mut 205
XSL-Transformation 64
XSS 씮 Cross Site Scripting
Z
Zertifizierung 447
Zugriffskosten reduzieren 235
U
Übergabeprojekt 462
Übertragbarkeit 27
UCON 410
Unicode 41, 367
Prüfung aktivieren 367
Prüfung dauerhaft aktivieren 372
Untersuchen von mehreren
Programmen 371
Unified Connectivity 씮 UCON
Unit-Test 101
Aufbau 139
Unit-Test 씮 Modultest
Upgrade 458
Usage and Procedure Logging 453
UTF-8 374
V
Verbuchung 51, 250
asynchrone 251
497
Wissen aus erster Hand.
Dr. Robert Arlitt ist Principal Consultant im Performance CoE der
SAP Global IT Business Innovation & Application Services und beschäftigt
sich dort mit der Performanceanalyse und -optimierung der SAP-internen
ABAP-Systeme auf SAP HANA.
Thorsten Marcus Dunz ist bei SAP aktuell Product Owner für Teile der
ABAP-Programmiersprache sowie für das Produkt SAP NetWeaver Application Server, Add-on für Code Vulnerability Analysis.
Hermann Gahm ist Principal Consultant im Performance CoE der
SAP Global IT Application Services.
Damir Majer ist Geschäftsführer der Majer Consulting und Majer Training in München (www.majcon.de), die Beratung, Coaching und Seminare im IT-Bereich anbieten.
Dr. Eric Westenberger arbeitet seit 2005 für SAP SE und ist aktuell als
Produktmanager für SAP HANA und SAP NetWeaver tätig.
Robert Arlitt, Thorsten Marcus Dunz, Hermann Gahm, Damir Majer,
Eric Westenberger
Besseres ABAP – Schnell, sicher, robust
497 Seiten, gebunden, Februar 2015
69,90 Euro, ISBN 978-3-8362-2939-5
www.sap-press.de/3641
Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Sie dürfen sie gerne empfehlen und weitergeben, allerdings nur vollständig mit allen Seiten.
Bitte beachten Sie, dass der Funktionsumfang dieser Leseprobe sowie ihre
Darstellung von der E-Book-Fassung des vorgestellten Buches abweichen
können. Diese Leseprobe ist in all ihren Teilen urheberrechtlich geschützt.
Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag.
Teilen Sie Ihre Leseerfahrung mit uns!
Herunterladen