Performanceanalyse

Werbung
Michael Kauth
SAP Certified Technical Consulting
Performanceanalyse
Inhalt
Hardwareanalyse ..................................................................................................................................2
CPU ...............................................................................................................................................2
Hauptspeicher................................................................................................................................2
I/O ..................................................................................................................................................2
Netz ...............................................................................................................................................2
Datenbankanalyse .................................................................................................................................3
Datenbankmonitor ST04................................................................................................................3
Teure SQL-Statements ..................................................................................................................4
Datenbank I/O................................................................................................................................4
Exclusive Lockwaits .......................................................................................................................5
R/3 Speicherkonfiguration .....................................................................................................................6
R/3-Puffer ......................................................................................................................................6
SAP-Memory .................................................................................................................................6
Insgesamt allokierter Speicher ......................................................................................................6
R/3 Workprozessanalyse ......................................................................................................................8
Lokale Workprozessübersicht .......................................................................................................8
Globale Workprozessübersicht......................................................................................................8
R/3 Workloadanalyse mit ST03 (ST03N ab 4.6) ...................................................................................9
Richtwerte Dialog ..........................................................................................................................9
RFC-Profile ................................................................................................................................. 10
Allgemeine Performanceprobleme ............................................................................................. 10
Spezielle Performanceprobleme ................................................................................................ 11
Performanceprobleme nach Anwendung ................................................................................... 11
Analyse von ABAP-Programmen ....................................................................................................... 12
Einzelsatzstatistik ....................................................................................................................... 12
SQL-Trace .................................................................................................................................. 12
RFC-Trace .................................................................................................................................. 12
Enqueue-Trace ........................................................................................................................... 12
ABAP-Trace ................................................................................................................................ 12
ABAP-Debugger ......................................................................................................................... 13
RFC .................................................................................................................................................... 14
GUI ..................................................................................................................................................... 15
Tabellenpufferung .............................................................................................................................. 16
Tabellenpufferung überwachen .................................................................................................. 16
Analyse gepufferter Tabellen...................................................................................................... 16
Analyse nicht gepufferter Tabellen ............................................................................................. 16
Optimieren von SQL-Anweisungen durch Sekundärindizes .............................................................. 18
Quellen ............................................................................................................................................... 19
SAP Basis-Beratung  Basisbetreuung von Einführungsprojekten  Schulungen
Michael Kauth
SAP Certified Technical Consulting
Hardwareanalyse
CPU
ST06  idle im Stundenmittel (Detail Analysis | Previous Hours) < 35%  Richtwert unterschritten
< 20%  Problem
Noch CPU-Kapazität auf anderen Rechnern?
 bessere Lastverteilung
Prozesse mit hohem CPU-Bedarf suchen
 Detail Analysis | Top CPU Processes
R/3-Workprozesse?  Identifizieren mit SM50
 Verschieben in den Nachtbetrieb möglich?
 Detailanalyse mit ABAP-Trace SE30
DB-Prozesse ?  ST04 DB-Prozessmonitor  Detailanalyse teure SQLStatements
Externe Prozesse?  abklemmen
ST06  Load average (Anzahl der Prozesse, die im Mittel auf CPU warten) sollte bei Null sein. Liegt
der Wert der letzten 15 Minuten über 3.00, so sollte nach der Ursache geforscht werden.
Hauptspeicher
Hauptspeicherengpässe können CPU-Engpässe verursachen. (Vermehrtes Swapping)
Swap: 3mal physischer Hauptspeicher. Minimal 3,5 GB. (20 GB auf 64-bit Systemen)
ST06  Pagingrate pro Stunde (Detail Analysis | Previous Hours) > 20% des phsyischen
Hauptspeichers (Pages out; NT: Pages in)  Hauptspeicherengpaß
- Noch freie CPU-Kapazität auf anderen Rechnern?
 bessere Lastverteilung
- Prozesse mit hohen Memorybedarf suchen
 ST02 Modusliste
 SM04 Memory
- File System Cache auf 7-10% des physischen Hauptspeichers minimieren.
(HP-UX: dbc_max_pct, AIX: maxperm, NT: Network | Services | Server | Maximize
Throughput for Network Appl.)
ST06  Sehr hohe Werte von “physical memory free” deuten darauf hin, dass die
Speicherzuordnung in den R/3-Profilen noch erhöht werden kann. Niedrige Werte können
zu Engpässen z.B. auf Betriebssystemebene führen.
I/O
ST06  Detail Analysis | Disk  Auslastung (Util.) > 50%  Problem
Bessere Verteilung der Daten.
Ziel: gleichmäßig belastete Platten
Netz
ST06  Detail Analysis | LAN Check by Ping
Applicationserver – Datenbankserver sollte < 10 ms sein.
Applicationserver – Frontend  s. Abschnitt GUI
Parameter
Unter UNIX werden Parameteränderungen verfolgt mit:
ST06  Detail Analyse | Parameter Changes | History of File
-2-
Michael Kauth
SAP Certified Technical Consulting
Datenbankanalyse
Datenbankmonitor ST04
Oracle
- Datenpuffer
- Data buffer: Size
- logische Zugriffe: Read, physische Zugriffe: Physical Read
- init<sid>.ora: DB_BLOCK_BUFFERS in 8KB-Blöcken
- Qualität rule-based Optimizer >= 97%
- Qualität cost-based Optimizer >= 95%
- Buffer busy waits > 5%  Detailanalyse
- Undo-head, undo-block > 1%  u.U. Rollbacksegmente hinzufügen
- data-block > 1%  u.U. Data Buffer vergrößern
- Shared Pool (bildet zusammen mit dem Datenpuffer die SGA)
- Enthält Verwaltungsinformationen in
- Row Cache (Data-Dictionary-Cache: Namen und Eigenschaften von Tabellen, Benutzern…)
- DD-Cache quality > 90%
- Shared SQL Area (Ausführungspläne und Statistiken von SQL-Statements)
- Pinratio >= 98%
- Init<sid>.ora: SHARED_POOL_SIZE in Byte
- Ist noch Platz im Shared Pool frei?  V$SGASTAT -> Free memory
- Redo Log Buffers
- init<sid>.ora: LOG_BUFFER als Vielfaches von DB_BLOCK_SIZE
- Alloc fault rate > 1%  u.U. Online Redologs vergrößern
- Calls
- User Calls: Aus der Anwendung stammende SQL-Zugriffe
- Recursive Calls: Zusätzlich durch das Oracle generierte Zugriffe, z.B. bei Misses im DataDictionary Cache oder beim Anlegen neuer Tabellenextents
- User Calls/Recursive Calls < 1 – 2  Shared Pool vergrößern, init<sid>.ora:
row_cache_cursors > 100 (prüfen), sapdba -next
- rollbacks: Hoher Wert  Auf fehlerhafte Transaktionen prüfen; Oracle-Alert-Log prüfen
- Parses: Anzahl der Parse-Vorgänge für SQL-Statements
- User Calls/Parses < 4  Shared SQL Area u.U. zu klein
- Reads/User Calls > 30  Prüfen auf „Teure SQL-Statements“ (s.u.)
- Time Statistik
- busy wait time: Die Oracle-Schattenprozesse warten auf eine Resource
- idle wait time: Die Oracle-Schattenprozesse haben nichts zu tun
- total wait time: busy + idle wait time
- busy wait time/total wait time sollte klein sein
- Sessions busy: (CPU-time + busy wait time)/(CPU-time + total wait time)
- Details finden sich über ST04  Detail Analysis | Wait Events
- Program Global Area (prozesslokaler Speicher)
- Variabel (Richtwert 2,5 – 5 MB pro Prozess)
- Prozesse: ST04  Detail Analysis | Oracle Sessions
SQL-Server
- Datenpuffer (Data cache)
- Data cache KB: Size
- Cache hit ratio > 95%
- Größe: Rest des Server-Speichers
- Procedure-Puffer (Procedure Cache)
- Stored Procedures und Ausführungspläne für SQL-Statements
- ST04 Procedure cache KB, Procedure cache KB in use
-3-
Michael Kauth
SAP Certified Technical Consulting
-
- Größe wird dynamisch festgelegt.
Fester Speicheranteil für Connections, Sperren… (ca. 20-100 MB)
- Größe wird dynamisch festgelegt.
Server-Speicher (Summe der 3 vorhergehenden Arten)
- ST04 Dynamic memory KB
- Variiert zwischen Maximum (Minimum) memory KB oder 0 und 2 GB bei Auto Growth
- Parameter MAX (MIN) SERVER MEMORY
- Empfehlung: Kein Auto Growth
DB2/OS390
- Datenpuffer (Buffer-Pools und Hiperpools)
- Puffert Daten- und Index-Pages
- Read Random Hit Ratio >= 95%
- Hiperpool Efficency >= 10%
- EDM-Pool
- Globaler Teil des Dynamic Statement Cache
- Global Cach Hit Ratio >= 95%
- Tread-lokale Caches
- Lokaler Teil des Dynamic Statement Cache
- Local Cache Hit Ratio >= 50%
- Reprepare Ratio (Verdrängung) < 50%
Teure SQL-Statements
- können zu Hardwareengpässen führen (z.B. CPU, I/O)
- blockieren R/3-Workprozesse
- verdrängen andere Daten aus dem DB-Datenpuffer
Aktuell laufende SQL-Statements (Oracle):
ST04  Detail Analysis | Oracle Sessions  mehrfach auffrischen
- zugehöriges R/3-Programm in SM50 ermitteln  Nachtbetrieb?
- Ansonsten Analyse wie bei „Statistik von SQL-Anweisungen auswerten“
Statistik von SQL-Anweisungen auswerten (Shared SQL Area) (Oracle):
ST04  Detail Analysis | SQL Request
- sortieren nach Buffer Gets
- Buffer Gets/ST04-Reads = Prozentualer Anteil der Anweisung an der Gesamtlast
- Disk Reads/ST04-Physical Reads analog
- wenige Statements > 5% Gesamtlast?  Tuning erforderlich
- SQL-Statement ermitteln
- Wird ein passender Index verwendet (Explain)?
- Kann ein neuer oder modifizierter Sekudärindex weiterhelfen? Kandidaten sind
SQL-Statements, bei denen das Verhältnis von „Buffer Gets“ zu „Records“
schlechter als 10 zu 1 ist.
- SAPNet-Recherche mit „Performance“ und Tabellenname
- ABAP-Optimierung (Kandidaten sind SQL-Statements, die viele Gets/Execution
aufweisen, also möglicherweise unnötig viele Daten lesen.)
DB2/OS390:
Aktuell laufende SQL-Statements:
DB2  Thread Activity
Statistik von SQL-Anweisungen:
DB2  Statement Cache Statistics
Datenbank I/O
ST04  Detail Analyse | Filesystem Request  I/O pro Datei  Hoch?
ST04  Goto | Statistics | Filesystem Waits  Wartesituationen?
 Auslastung der Platte untersuchen (ST06), gegebenenfalls Datenverteilung ändern
Lastintensiv:
- Redo-Logs
(Oracle)
-4-
Michael Kauth
SAP Certified Technical Consulting
-
(PSAPROLL)
(saparch)
Transaction Log
(Tempdb)
(SQL-Server)
Exclusive Lockwaits
DB01  über Client-Host, Client-PID und SM50 zugehörigen R/3 Prozess ermitteln
- falls kein R/3 Prozess  Datenbankprozess beenden
Parameter
Änderungen von Datenbankparametern werden verfolgt mit
ST04  Detail Analyse | Parameter Changes | History of File
Tabellenstatistiken für Datenbankoptimierer
Regelmäßige Ausführung mit DB13 prüfen.
Datenbankindizes
Missing Indizes mit DB02 prüfen.
-5-
Michael Kauth
SAP Certified Technical Consulting
R/3 Speicherkonfiguration
R/3-Puffer
ST02  Buffer  Swaps?  Entsprechenden Profilparameter erhöhen
Ausnahme: Beim Programm-Puffer können bis zu 10000 Swaps pro Tag toleriert werden.
ST02  Buffer  Hitratio sollte über 98% liegen.
Ausnahmen: Program, Single record und Export/Import-Buffer.
Alle Puffer sollten mindestens 20% Free Space aufweisen. Ausnahmen: Nametab, CUA, screen und
Calender-Buffer, die in produktiven Umgebungen nur einem geringen Wachstum unterliegen.
SAP-Memory
Extended Memory ist im Shared Memory abgebildet und wird beim Kontextwechsel in den
Adressraum eines Workprozesse hineingemapped. Initial allokiert das System Extended Memory in
der Grösse em/initial_size_MB. Für einen einzelnen Benutzerkontext steht maximal Extended
Menory in der Grösse von ztta/roll_extension zur Verfügung. (NT s.u.)
Roll Memory wird beim Kontextwechsel aus dem Roll-Puffer (shared) in den lokalen Speicher des
Workprozesses kopiert (was aufwendiger ist).
Heap Memory ist lokal zu einem Workprozess. Kontextwechsel sind nicht mehr möglich. Heap
Memory wird erst mit Durchstarten des entsprechenden Workprozesses wieder freigegeben.
Reihenfolge der Speicherbelegung durch Dialogworkprozesse (NT auch sonstige):
- Roll Speicher bis ztta/roll_first (Minimum ca. 100 KB)
- Extended Memory bis nichts mehr da ist, oder die Grenze ztta/roll_extention bzw.
em/address_space_MB erreicht ist.
- Roll Speicher bis ztta/roll_area erschöpft ist
- Heap Speicher
ST02  Extended Memory  Max. use > 80% in memory?  Problem
 Benutzer mit hohem Speicherverbrauch?  Detailanalyse
(ztta/roll_extention nutzen)
 em/initial_size_MB erhöhen, notfalls auf Kosten anderer Speicherbereiche.
Faustregel: 6-10 MB pro Benutzer, 70 –120% des physical Memory.
ST02  Roll area  Max. Use > in memory  Problem
 rdisp/ROLL_SHM erhöhen, falls genügend physical Memory.
NT: Zero-Administration Memory (Hinweis 88416)
- PHYS_MEMSIZE 70-100% des phys. Memory
- Alle anderen Speicherparameter löschen.
- Das Extended Memory vergrössert sich bei Bedarf dynamisch
- In den Adressraum eines Workprozesses wird Extended Memory in der Grösse von
em/address_space_MB eingebunden (ztta/roll_extention ist hier obsolet). Es lässt sich
also trotz des 32-bit Charakters von NT auch RAM von mehr als 2 GB effektiv nutzen,
da er auf die Workprozesse verteilt wird.
Insgesamt allokierter Speicher
ST02  Detail analysis | Storage
Storage shared between processes (R/3-Puffer)
+ User storage for all work processes
+ Size of Extended Memory
= Beim Starten von R/3 allokierter Speicher
Kann wachsen um
+ Maximum heap area for all work processes (abap/heap_area_total)
-6-
Michael Kauth
SAP Certified Technical Consulting
aktueller Wert: ST02  Heap memory  Current use
Hinzu kommt noch
+ von der Datenbank allokierter Speicher  ST04
+ 50 – 100 MB für das Betriebssystem
Die Summe des allokierten Speichers sollte den physisch vorhandenen um maximal 50%
übersteigen.
Der maximal allokierbare Speicher darf die Summe aus phys. Memory und Swap nicht
überschreiten!!
-7-
Michael Kauth
SAP Certified Technical Consulting
R/3 Workprozessanalyse
Lokale Workprozessübersicht
Infos zu den verschiedenen Gründen für den Status „hält“ und zu den verschiedenen Semaphoren
mit F1.
Semaphore: Resourcen, wie der Roll-Buffer, die serialisiert werden müssen. (Grün: WP hält
Semaphore, Rot: WP wartet auf Semaphore) Die Bedeutung der Semaphore ist in Hinweis 33873
erklärt.
SM50  Es sollten genügend frei Workprozesse (Status „wartet“) jeden Typs vorhanden sein.
SM50  Programm mit hohem Zeit-Wert?  Mit Benutzer klären, ob alles klar ist.
SM50  mehr als 20% der Workprozesse im PRIV-Mode  möglicherweise Speicherproblem
SM50  mehr als 40% der Workprozesse in einer DB-Aktion  möglicherweise DB-Problem
SM50  mehr als 20% der Workprozesse lesen dieselbe Tabelle
 möglicherweise Problem mit teuren SQL-Statements oder exclusive Locks
SM50  Aktion „Report laden“ oder Semaphore 1  Program-Buffer prüfen
SM50  Aktion „Roll In, Out“ oder Semaphore 6  Extended Memory und Roll-Buffer prüfen
SM50  Status „hält“, Grund „CPIC“  Probleme im Zielsystem?
SM50  CPU  WPs einer Art weichen von „Dreiecksform“ ab (Betriebsartenumschaltungen
berücksichtigen.)
 Anzahl WPs prüfen
 Lastverteilung prüfen
SM50  WPs im Status „beendet“ und nicht mehr zu starten?
 Prozesses | Trace | Anzeigen  dev-Trace lokal speichern.
Globale Workprozessübersicht
SM66 bietet Zusatzinformationen wie Transaktionscode, Name des aufrufenden Programmes,
Jobname, aktuelle Extended Memory Belegung, aktuelle Heap Memory Belegung. Bei
ausgeschaltetem RFC werden Informationen vom Message Server geholt und sind möglicherweise
veraltet.
Dispatcher-Queue
SM51  Springen | Queue Info  Höchststand wartenden Anfragen gibt Info zu WP-Mangel.
Workprozessübersicht auf Betriebssystemebene
dpmon pf=/usr/sap/<SID>/SYS/profile/Instanzprofilname
-8-
Michael Kauth
SAP Certified Technical Consulting
R/3 Workloadanalyse mit ST03 (ST03N ab 4.6)
Av. response time = Wait time + Load+gen time + Roll-in time + Roll-wait time + Processing time +
DB time + Enqueue time + GUI time (ab 4.6)
Die Aussage von ST03 zur av. response time kann durch einzelne langlaufende oder auch
regelmäßig ausgeführte schlecht programmierte Programme verzerrt werden. Eine solche
Verzerrung kann über STAT/STAD ermittelt werden.
Wird der Schnitt nicht durch solche Ausreißer kaputt gemacht, kann man sich an folgenden
Richtwerten orientieren
Richtwerte Dialog
Av. response time sollte nicht größer als ca. 1000 ms sein.
Av. CPU time sollte bei 40% der av.response time liegen.
Wait time
>> 10% der av. Response time
allgemeines Problem
>> 50 ms
z.B. zu wenig WPs1 oder WPs blockiert
Load+gen time >> 50 ms
Programmpuffer (CUA- oder ScreenPuffer) zu klein oder CPU-Engpass
Roll-in time
>> 20 ms
Roll-Puffer oder Extended Memory zu
klein oder CPU-Engpass
Roll-wait time >> 200 ms
Problem in der Frondend-Kommunikation
(ab 4.6; zusammen mit hoher GUI-Zeit)
oder Komunikationsproblem mit externer
Komponente bei sonstigem
synchronem RFC
GUI-Zeit
>> 200 ms
(ab 4.6) Probleme mit
Frontendkommunikation (zusammen mit
Hoher Roll-wait time)
Enqueue time >> 5 ms
Problem mit Enqueue oder Netz
Processing time >> 2 x CPU-time
CPU-Engpass oder
(Processing time verstreicht, ohne dass CPU
Workprozess im Zustand “hält” (SM50)
genutzt werden kann)
(s. auch „Fehlende Zeiten“ bei der
Einzelsatzstatistik weiter unten)
DB request time>> 40% von (av. Response time
Datenbank-, Netz- oder CPU-Problem
- Wait time)
Richtwert (200 – 600 ms)
Time per DB request
>> 5 ms
Datenbankproblem
Direct Reads
>> 2 ms
Datenbankproblem
Sequential Reads
>> 10 ms
Datenbankproblem
Changes and commits >> 25 ms
Datenbankproblem
Av. RFC+CPIC time
>> 10 ms
Kommunikationsproblem
Die Processing time ist die Differenz von av. Response time und allen Zeiten, in denen keine CPUZeit benötigt wird. Sie berechnet sich aus
Av. Response time – Wait (for workprocess) time – DB request time – Enqueue time – Roll in time –
Roll wait time – Load+gen time.
Richtzeit für die durchschnittliche Roll in/out time: 10 ms.
Die Roll-out time geht nicht in die av. Response time ein.
1
Die Erhöhung der Anzahl der Workprozesse bringt nur etwas, wenn Workprozesse durch Wartesituationen blockiert werden,
die keine CPU-Leistung kosten (z.B. PRIV-Mode oder Sperrsituationen auf der Datenbank), UND CPU und Speicher des
Rechners noch nicht voll ausgelastet sind. Im Zweifel ist das Warten auf CPU teurer als das Warten auf Workprozesse. Bei
CPU- bzw Hauptspeicherengpässen und hoher Processing-time kann die Reduzierung der Anzahl der Workprozesse die
Performance verbessern.
-9-
Michael Kauth
SAP Certified Technical Consulting
Die Av. RFC+CPIC time ist bei asynchronem RFC die Zeit, die zum Aufbau der Verbindung und zur
initialen Datenübergabe benötigt wird (Richtwert < 50 ms). Beim synchronen RFC ist es die
Gesamtzeit des Aufrufs inclusive der Roll wait time und der Zeit für die Übergabe der
Ergebnisdaten.
Die Roll wait time ist die Zeit in der ein Programm auf die Antwort eines synchronen RFC-Aufrufes
wartet. In dieser Zeit ist das Programm aus dem Speicher herausgerollt, die Antwortzeit läuft aber
weiter. Im gerufenen System wird ein Statistiksatz des Task-Typs RFC erstellt. Ab 4.6 entsteht Roll
wait time auch bei der Kommunikation mit dem GUI.
Aktivität oder Durchsatz := Anzahl Transaktionsschritte pro Zeiteinheit
Last := Gesamte Antwortzeit
Richtwerte Update
Direct Reads
Richtwert 10 ms
Sequential Reads
Richtwert 15 ms
Changes and commits Richtwert 40 ms
RFC-Profile
Client-/Server-Destinationen
- Summenstatistiken zu einzelnen Destinationen. (Angaben zu Funktionsbausteinen haben hier
keine Bedeutung und werden in neueren Releases nicht mehr aufgeführt.)
Client Profil
- das lokale System stellt den RFC-Request (Sender)
Server Profil
- das lokale System bearbeitet den RFC-Request (Empfänger)
Call time/Aufrufzeit (gemessen im Sender-System)
Call time – Execution time > 20% von Call time
 Probleme in der Verbindung zwischen Sender und Empfänger
 SM59 Verbindungstest bzw. RFC-Trace
Execution time/Ausführungszeit (gemessen im Empfänger-System)
Sichten:
Funktionsbausteine
- Es werden Statistikinformationen zu den 5 teuersten Funktionsbausteinen gesammelt. (Anzahl
 stat/rfcrec im Profil)
Allgemeine Performanceprobleme
Indikatoren: Wait time, DB request time, Processing time oder av. Response time zu hoch.
Zeitliche Einordnung: ST03  Auswahl von „Total“, „Dialog“, „Background“...  Time Profile.
Interessant ist z.B., ob die Hintergrundlast Ursache für eine hohe Gesamtlast zu Hauptarbeitszeiten
ist.
Lastverteilung zwischen Servern:
ST03  Goto | Performance Database | Analyse all Servers | Compare all Servers
- Bei gleichen Rechnern sollte die „CPU time total“ ungefähr gleich sein.
- Starke Unterschiede in den Datenbankzeiten weisen auf Netzprobleme hin. 2
2
Dies gilt auch für datenbankintensive Batchjobs: Wenn Batchjobs auf dem Datenbankserver schneller als auf
Applicationservern laufen, so ist dies ein Indikator für Netzprobleme.
- 10 -
Michael Kauth
SAP Certified Technical Consulting
Spezielle Performanceprobleme
Einzelne Übeltäter findet man über:
ST03  Auswahl von „Total“, „Dialog“, „Background“...  Transaction Profile
Interessant sind
- die erzeugte Systemlast, insbesondere von selbstgestrickten Transaktionen
- die mittlere Antwortzeit der Kerntransaktionen
- Datenbanklast (Datenbankzeit > 60% der Gesamtzeit  SQL-Trace)
- CPU-Last (CPU-Zeit > 60% der Gesamtzeit  ABAP-Trace)
Einige Exoten:
- MainMenu: Aktionen im Menü
<= 100 ms (Richtwert Antwortzeit)
-
AutoAbap: läuft periodisch im Hintergrund
< 1000 ms
Buf.Sync: Puffersynchronisation
< 1000 ms
RSM13000: Alle Verbuchungsbausteine, die nicht einer Transaktion zugeordnet werden
können
< 3000 ms
ST03  Auswahl von „Total“, „Dialog“, „Background“...  Memory Profile
Performanceprobleme nach Anwendung
Der Anwendungsmonitor ST07 schlüsselt nach Benutzern pro Modul auf. Durch Doppelklick steigt
man in der Hierarchie in die Tiefe.
Last pro Anwendung:
ST07  Antwortzeit
Pufferverbrauch pro Anwendung:
ST07  SAP-Puffer
- 11 -
Michael Kauth
SAP Certified Technical Consulting
Analyse von ABAP-Programmen
Einzelsatzstatistik
STAT/STAD  Auswahl der verdächtigen Transaktion/des verdächtigen Programms
Doppelklick zur Einzelauswahl  All Details
Hohe Datenbankzeiten  Datenbankproblem
Häufig: “Note: Tables were saved in the table-buffer”  Verdrängung/Invalidierung
im Tabellenpuffer.
Hohe Roll wait time, hohe GUI time  Möglicherweise Kommunikationsproblem
Hohe CPU-Zeiten  Aufwendige Berechnungen o. häufige Zugriffe auf den
Tabellenpuffer. CPU > 50%  ABAP-Trace oder ABAP-Debug.
„Fehlende Zeiten“ bei langlaufenden Jobs können anhand der Processing time (s.o.)
ermittelt werden. Die Processing time sollte im Wesentlichen die Zeit sein, in
der die CPU genutzt wird. Ist die Processing time deutlich grösser als die CPU-Zeit,
so könnte:
- Ein Statistik-Couter einen Overflow haben
- Ein Paging-Problem oder ein CPU-Engpass vorliegen
- Eine zum Application-Server lokale Datei verarbeitet werden (auch Sort mit
Auslagerung auf Platte)
- Ein Batch-Job „Commit work and wait“ abgesetzt haben
SQL-Trace
ST05 
List Trace 
RFC-Trace
ST05 
Vor dem Trace Programm einmal ausführen, um Puffer zu füllen.
Trace zu lastarmen und lastintensiven Zeiten wiederholen.
Der Trace läuft lokal dort, wo er eingeschaltet wurde. 3
Ausführen
Zeiten in Mikrosekunden.
Direct Read (Rec = 1 !) 2-10 ms. Nur in Einzelfällen höher.
Sequential Read nutzt Array Fetch. Es passen umso mehr Sätze in einen Array rein,
um so weniger Felder beim Select gewählt wurden. Richtzeit für einen optimalen
Array Fetch 5 ms im Mittel (< 10 ms) pro selektiertem Satz oder < 100 ms pro Fetch
im Mittel. Fetch > 250 ms und nur wenige Sätze selektiert  Möglicherweise kann
ein neuer oder modifizierter Sekundärindex weiterhelfen.
Goto | Summary | Verdichten  Sortieren nach Laufzeit liefert die teuersten SQLs.
Goto | Identical Selects  liefert Mehrfachzugriffe, die sich vielleicht einsparen
lassen.
Object: Name des Empfängers
Oper: „Client“ (Instanz, auf der der Trace läuft ist Client) oder „Server“
Statement: U.a. Name des Funktionsbausteins, übertragene Datenmenge
Enqueue-Trace
ST05 
Object: Name des Enqueue-Objektes
Oper: Einzelne Enqueues setzen/freigeben (ENQUEUE/DEQUEUE);
DEQ ALL zu Objekt oder zum Ende der Transaktion; ENQPERM vererbt
die Sperre an die Verbuchung
ABAP-Trace
SE30 
3
Zu analysierendes Programm zunächst einmal ohne Analyse durchführen, um alle
Puffer entsprechend zu füllen. Analyse zu lastarmen und lastintensiven Zeiten
wiederholen.
Performancebeeinträchtigung durch den Trace ca. 5%
- 12 -
Michael Kauth
SAP Certified Technical Consulting
Auswerten
Hitliste:
Ausführungszeiten je Anweisung sortiert nach Bruttozeiten 4
Hierarchie:
Chronologischer Ablauf
Bruttozeiten enthalten alle enthaltenen Aufrufe. (z.B. Perform: Brutto > Netto)
Analyse: Einstieg in die Hitliste – Sortieren nach Nettolaufzeit zur Ermittlung der
Anweisungen mit der höchsten Nettolaufzeit
Analyse komplexer Programme: Analyse des gesamten Programmes mit voller
Aggregierung und ohne Analyse von Operationen auf interne Tabellen (DefaultVariante) – Ermitteln der Modularisierungseinheiten mit hoher Laufzeit –
Detailanalyse mit aktiviertem Trace für Operationen auf interne Tabellen und ohne
Aggregation
ABAP-Debugger
Der ABAP-Debugger setzt u.U. Commits ab, erzeugt also möglicherweise inkonsistente
Datenbestände!
Starten des Progamms  mit SM50 | Debugging mehrfach in das Programm springen  identifiziert
Coding-Stellen mit hohem CPU-Bedarf.
Springen | Weitere Bilder | Speicherverbrauch  Aktueller Hauptspeicherbedarf (Richtwerte:
Dialogprogramm <= 100 MB, Batchprogramm <= 1GB)
Springen | System | Systembereiche  ITAB  Liste der internen Tabellen.
FILL  Anzahl der Einträge
Hauptspeicherbedarf = FILL * Leng
Prüfen: Werden nicht mehr benötigte interne Tabellen mit REFRESH bzw. FREE freigegeben?
Werden interne Tabellen mit dem Zusatz BINARY SEARCH durchsucht?
(READ TABLE … WITH KEY … BINARY SEARCH auf sortierte Tabellen)
(4.0: verwenden von SORTED TABLE oder HASHED TABLE)
Der ABAP-Trace ist performanceaufwendig. Alle ermittelten Zeiten werden daher „korrigiert“ und sind niedriger, als die
Zeiten der parallel geschriebenen Statistiksätze.
4
- 13 -
Michael Kauth
SAP Certified Technical Consulting
RFC
RFC dient der Kommunikation zwischen verschiedenen Systemen oder – innerhalb eines Systems –
der Kommunikation zwischen Instanzen bzw. zwischen der Applikationsebene und der
Präsentationsebene sowie der Parallelisierung von Prozessen. RFC wird immer von DialogWorkprozessen ausgeführt.
Zwei Systeme lassen sich auf „harte“ und „weiche“ Art koppeln.
Hart: Ist der Partner nicht erreichbar, bricht die Funktion, die RFC verwendet, ab.
Weich: Gegenseitige Verfügbarkeit wird nicht vorausgesetzt. (Beispiel: ALE)
Man unterscheidet 4 Arten von RFC:
- Synchroner RFC: Der Sender (Client) wartet, während der RFC beim Empfänger (Server) läuft
 Roll wait time. (CALL FUNCTION ... DESTINATION ...)
- Asynchroner RFC: Der Sender setzt seine Arbeit nach Start des RFC fort.  Parallelisierung
möglich. (CALL FUNCTION ... STARTING NEW TASK ... DESTINATION ...)
- Transaktionaler RFC: Asynchroner RFC. tRFCs werden nach COMMIT WORK als LUW
ausgeführt. (CALL FUNCTION ... IN BACKGROUND TASK DESTINATION ...)
- Queued RFC: tRFC, bei dem die Reihenfolge der Abarbeitung im Zielsystem der der Erstellung
entspricht.
Ablauf:
- Der Sender stellt die Verbindung zum Empfänger her. SM50: hält CPIC CMINIT
- Die erforderlichen Daten werden zum Empfänger übertragen. SM50: hält CPIC CMSEND
- Der synchrone RFC wartet. (Roll Out, Roll wait, SM04: Terminal APPC-TM, SMGW: offene
Kommunikationsverbindung)
- Der Empfänger „weckt“ den Sender des synchronen RFCs und schickt Daten zurück. SM50: hält
CPIC CMRECEIVE
- Abbau der Verbindung
SM59 Verbindungstest: TCP/IP-Timeout 
- Empfängersystem verfügbar?
- TCP/IP: Gateway korrekt definiert? S. auch Hinweis 63930 und 44844.
SM59 Verbindungstest: Partnerprogramm nicht registriert 
- Empfängerprozess starten
SM59 Verbindungstest: > 100 ms 
- Netzwerkverbindung zu langsam/überlastet (Prüfen mit „ping“, Richtwert für gute Verbindung 10
– 30 ms)
- Empfängersystem überlastet (Alle Workprozesse belegt?)
- TCP/IP: Prüfen, wie viele parallele Empfangsprozesse für IDOCs gestartet sind
Zur Begrenzung des Resourcenverbrauchs durch asynchronen RFC s. Hinweis 74141. Über das
Programm RSARFCLD könne die Quotas dynamisch konfiguriert werden.
SM58: Fehlerkontrolle für tRFCs
Für Verbindungen mit mehr als 50 tRFCs täglich sollte die automatisch Einplanung des Batchjobs
RSARFCSE bei Kommunikationsfehlern unterdrückt werden. Stattdessen das Programm
RSARFCEX mit der Destination und dem aktuellen Tag in der Periode 30 Minuten einplanen.
Bei hohem tRFC-Aufkommen müssen die Tabellen ARFCSSTATE und ARFCSDATA reorganisiert
werden. (RSARFC01, s. auch Hinweis 375566)
- 14 -
Michael Kauth
SAP Certified Technical Consulting
GUI
Ab R/3 4.6 wird für die Kommunikation zwischen Präsentations- und Applikationsebene die ControlTechnik genutzt. Controls sind Softwarekomponenten, die im GUI eigenständig laufen. Bei Listen
z.B. wird nicht nur der aktuelle Screen, sondern eine größere Datenmenge übertragen. Operationen
wie Blättern erfolgen dann auf dem Front-End und erfordern keine Kommunikation mit dem
Application-Server mehr.
Zum Aufbau eines Bildschirms sind u.U. mehrere Interaktionen (Roundtrips) zwischen
Präsentations- und Applikations-Server erforderlich. Pro Roundtrip werden Daten per synchronem
RFC von der Applikationsebene an den Gui übertragen.
Die GUI-Zeit eines Transaktionsschritts umfasst die Roll wait time, die beim RFC anfällt.
Analyse von Problemen mit der GUI-Kommunikation bei Controls mit STAD:
- Select Fields: Roll wait time, No. of round-trips, GUI time, Terminal in-Message, Terminal outMessage (App.  GUI, unkomprimiert)
- Interessant sind hohe GUI-Zeit oder hohe Datenübertragungsmenge
- Datenübertragung: Im Mittel 1 KB pro 100 ms; häufig über 1 sek  Netzwerkproblem oder
Hardwareengpass auf dem Präsentationsserver
- Datenmenge: Im Mittel 5-8 KB/Transaktionsschritt; häufig über 50 KB  Problem beim
Programm(design).  Transaktionsvariante nutzbar? (Hinweis 332210)
Analyse von Problemen mit der GUI-Kommunikation bei Controls mit ST05:
- SQL-, Enqueue- und RFC-Trace aktivieren
- Suchen nach RFC-Bausteinen mit Ziel Präsentation-Server (Spalte: Objekt)
- Anteil der Antwortzeit an der Gesamtantwortzeit relevant?
- Bewerten (s.o) des Verhältnisses von Antwortzeit (duration) zur übertragenen Datenmenge
(bytes sent nach Zeilenauswahl)
Analyse des Netzwerks zwischen Application- und Presentation-Server mit „Lan Check by Ping“:
- Zu analysierende Präsentation-Server markieren
- 10 x Ping; Typische Antwortzeiten:
- LAN < 20 ms
- WAN < 50 ms
- Modem < 250 ms
- Keine „Losses“
Im WAN oder bei langsamen Netz sollte die Low Speed Connection genutzt werden. (Hinweis
164102) (Bei der Low Speed Connection steht die Vorschlags-Funktion für alte Eingaben nicht zur
Verfügung.)
Bei Hardwareengpässen auf dem Presentation-Server auf das Classic-Design umschalten.
- 15 -
Michael Kauth
SAP Certified Technical Consulting
Tabellenpufferung
Tabellen können im Einzelsatzpuffer TABLP oder im generischen Tabellenpuffer TABL gepuffert
werden.
Zur Synchronisation der Tabellenpuffer verschiedener R/3-Instanzen wird in regelmäßigen
Abständen (rdisp/bufreftime) die Tabelle DDLOG ausgelesen, wenn rdisp/bufrefmode auf ..,exeauto
steht.
Tabellenpufferinhalte werden in den Einheiten invalidiert, in denen sie gefüllt werden.
Tabellen puffern, wenn
- sie klein sind
- häufig auf sie zugegriffen wird
- ihre Änderungsrate klein ist
- kurzzeitige Inkonsistenzen zwischen den Applikationsservern akzeptiert werden können
- bei generisch n-gepufferten Tabellen der Zugriff mindestens über die ersten n Schlüsselfelder
erfolgt.
Prüfen: Sind die im Customizing generierten Konditionstabellen Annn, Bnnn, Cnnn, Dnnn,
KOTEnnn, KOTFnnn, KOTGnnn und KOTHnnn, (nnn = 500 – 999 sind Kundentabellen) korrekt
gepuffert?
Tabellenpufferung überwachen
ST02  freier Platz > 10%, freie Einträge > 20%.
Symptome für Tabellenpufferprobleme:
- Benutzer klagen über sporadisch auftretende lange Antwortzeiten in Transaktionen
- In der Shared SQL Area oder bei SQL-Traces finden sich teure Anweisungen mit Bezug auf
gepufferte Tabellen.
- STAT: Häufig: Note: Table were saved in Table buffer.
ST10 – Status:
Valid
- Tabelle gültig im Puffer
Invalid
- Tabelle invalidiert. Es läuft gerade eine Aktion die noch nicht mit Commit
abgeschlossen wurde.
Pending
- Tabelle invalidiert. Karenz läuft gerade.
Loadable
- Tabelle invalidiert. Kann geladen werden.
Absent, displaced
- Tabelle noch nicht geladen oder verdrängt.
Multiple
- Einige generische Bereiche sind gültig, andere invalidiert.
Error
- Fehler beim Laden der Tabelle
Analyse gepufferter Tabellen
ST10 - sortieren nach DB activity: Rows affected  sollte klein sein
- sortieren nach Changes o. Invalidierungen  Changes/Request (Änderungsrate)
sollte klein sein.
- sortieren nach Tabellengröße: < 1MB  Änderungsrate < 1%, < 5MB  ÄR < 0,1% (4.0B)
Analyse nicht gepufferter Tabellen
ST10 - sortieren nach Requests Total  Hoch: Tabelle ist Pufferungskandidat, wenn sie die
Kriterien oben erfüllt und gepuffert werden darf.
DB05 - Die Anzahl Sätze, die nach einer Invalidierung neu gelesen werden müssen und
andererseits die Anzahl der generischen Regionen dürfen nicht zu hoch sein.
Z.B. 150000 Sätze ( volle Pufferung lohnt sich kaum, wenn die Änderungsrate nicht sehr
gering ist): Bei Invalidierung maximal 10000 Sätze, 1500 gen. Regionen ist ok.
- 16 -
Michael Kauth
SAP Certified Technical Consulting
Die Pufferung von Tabellen soll die Zugriffe auf die Datenbank vermindern, also das Verhältnis von
Requests zu Rows affected klein halten. Bewirkt eine Änderung der Tabellenpufferung dies nicht, so
muss sie überdacht werden.
Shared SQL Area bzw. SQL-Trace
Nachdem ein System eine Weile läuft, sollten keine teuren SQL-Statements auftreten, die zu
Pufferladevorgängen gehören. Solche SQL-Statements sehen folgendermaßen aus:
- In der Where-Bedingung einer generisch-n-gepufferten Tabelle sind die ersten n Felder mit
Gleichbedingungen angegeben. (Voll gepuffert = generisch-1: Mandt)
- Die SQL-Anweisung enthält eine Order-by-Bedingung, die alle Felder des Schlüssels enthält.
- 17 -
Michael Kauth
SAP Certified Technical Consulting
Optimieren von SQL-Anweisungen durch Sekundärindizes
Teure SQL-Statements, bei denen das Verhältnis von „Buffer Gets“ zu Treffern schlecht ist können
möglicherweise durch neue oder modifizierte Sekundärindizes verbessert werden.
-
-
-
Bei SQL-Statements aus SAP-Standard-Programmen, nach einem passenden Hinweis suchen.
Keine Sekundärindizes auf SAP-eigene Tabellen mit Bewegungsdaten  Matchcodes usw.
Bei kundeneigenen Programmen nach Möglichkeiten suchen, vorhandene Indizes zu nutzen.
(Z.B. durch Ergänzung von Where-Bedingungen durch fehlende unselektive Felder oder durch
alternative Zugriffspfade. Für die Logistikmodule s. Hinweise 185530, 187906 und 191492)
Neue Indizes machen nur Sinn, wenn sie die Ergebnismenge einer Abfrage signifikant
einschränken. (Treffermenge kleiner 5% der Tabelle.) Es müssen also selektive Felder
verwendet werden.
Je selektiver ein Feld, um so weiter muss es vorne im Index stehen.
Ein Index sollte nur wenige Felder umfassen. Richtwert <= 4.
Gelegentlich kann es erforderlich sein, auch nicht selektive Felder, wie den Mandanten
aufzunehmen.
Indizes sollten weitgehend disjunkt gehalten werden.
Bei Tabellen, die häufig geändert werden, sind in der Regel mehr als 5 Indizes nicht
empfehlenswert.
Die Anlage von Indizes zu großen Tabellen kann lange dauern. Während der Anlage wird die
gesamte Tabelle gesperrt.
- 18 -
Michael Kauth
SAP Certified Technical Consulting
Quellen
Thomas Schneider
SAP Performanceoptimierung
Analyse und Tuning von SAP-Systemen
SAP PRESS/ Galileo Press 2001
Kurt Bishop
Fundamental Tools in Application Tuning
in: www.intelligentERP.com , Volume 1, Number 4, 1999
SAP Online Dokumentation
- 19 -
Herunterladen