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!