2 Analyse von Hardware, Datenbank und ABAP-Applikationsserver
2 Analyse von Hardware, Datenbank und ABAP-Applikationsserver
2 Analyse von Hardware, Datenbank und ABAP-Applikationsserver
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Mit der <strong>Analyse</strong> der <strong>Hardware</strong>ressourcen, der <strong>Datenbank</strong><br />
sowie der Workprozesse <strong>und</strong> Speicherbereiche des SAP NetWeaver<br />
AS <strong>ABAP</strong> steigen wir – bottom-up – in die Performanceanalyse<br />
ein. Verschaffen Sie sich einen ersten Überblick über die<br />
aktuelle Situation im System!<br />
2 <strong>Analyse</strong> <strong>von</strong> <strong>Hardware</strong>, <strong>Datenbank</strong><br />
<strong>und</strong> <strong>ABAP</strong>-<strong>Applikationsserver</strong><br />
Dieses Kapitel erläutert die Gr<strong>und</strong>lagen <strong>von</strong> Performanceanalysen<br />
der <strong>Hardware</strong>, der <strong>Datenbank</strong>, der SAP-Speicherkonfiguration <strong>und</strong><br />
der SAP-Workprozesse des SAP NetWeaver Application Servers<br />
<strong>ABAP</strong>. Am Ende eines jeden Abschnitts finden Sie Flussdiagramme,<br />
die die wichtigsten <strong>Analyse</strong>pfade zusammenfassen <strong>und</strong> die Abhängigkeiten<br />
zwischen den <strong>Analyse</strong>n verdeutlichen. Im letzten Abschnitt<br />
gehen wir auf den zentralen Überwachungsmonitor ein, der Performanceindikatoren<br />
aus allen Bereichen integriert.<br />
Zu diesen <strong>Analyse</strong>n erhalten Sie sofort Optimierungsvorschläge, sofern<br />
dies ohne umfangreichere Erklärungen möglich ist. Um auch einem<br />
in der Performanceanalyse unerfahrenen Berater oder Administrator<br />
einen schnellen Einstieg zu ermöglichen, verzichten wir<br />
bewusst auf Hintergr<strong>und</strong>informationen. So wird z. B. beschrieben,<br />
wie Sie das SAP Extended Memory überwachen <strong>und</strong> einstellen, ohne<br />
den Begriff SAP Extended Memory zu erklären. Umfassendere Informationen<br />
finden Sie anschließend in den Kapiteln 5 bis 15. Dieser<br />
Aufbau trägt unserer Erfahrung Rechnung, dass es möglich ist, viele<br />
Performanceprobleme im Bereich <strong>von</strong> Betriebssystem, <strong>Datenbank</strong><br />
<strong>und</strong> SAP-Basis anhand einfacher Handlungsanweisungen zu lösen,<br />
ohne sich vorher eingehend mit den Details der Architektur zu beschäftigen.<br />
75
2<br />
<strong>Analyse</strong> <strong>von</strong> <strong>Hardware</strong>, <strong>Datenbank</strong> <strong>und</strong> <strong>ABAP</strong>-<strong>Applikationsserver</strong><br />
Wann sollten Sie dieses Kapitel lesen?<br />
Dieses Kapitel sollten Sie lesen, wenn Sie die Performance des SAP-<br />
Systems, der <strong>Datenbank</strong> oder des Betriebssystems vom SAP-System<br />
aus technisch überwachen <strong>und</strong> optimieren wollen.<br />
2.1 Begriffsklärungen<br />
Die Begriffe Rechner, Server, <strong>Applikationsserver</strong>, SAP-Instanz, <strong>Datenbank</strong>,<br />
<strong>Datenbank</strong>server <strong>und</strong> <strong>Datenbank</strong>instanz werden in diesem Buch<br />
wie folgt verwendet:<br />
Rechner<br />
SAP-Applikationsinstanz<br />
<strong>Datenbank</strong><br />
Ein Rechner (oder Computer) ist eine physische Maschine mit CPU,<br />
Hauptspeicher, IP-Adresse etc.<br />
Eine SAP-Applikationsinstanz, auch kurz als SAP-Instanz bezeichnet,<br />
ist eine administrative Einheit: Sie besteht aus einem Satz <strong>von</strong> SAP-<br />
Workprozessen, die <strong>von</strong> einem Dispatcher verwaltet werden, sowie<br />
aus einem Satz <strong>von</strong> SAP-Puffern im Shared Memory des Rechners, auf<br />
den die Workprozesse zugreifen. Eine SAP-Applikationsinstanz kann<br />
eine <strong>ABAP</strong>-Applikationsinstanz (SAP NetWeaver Application Server<br />
<strong>ABAP</strong>, kurz AS <strong>ABAP</strong> oder eine Java-Applikationsinstanz (SAP Net-<br />
Weaver Application Server Java, kurz AS Java) sein. Es kann mehrere<br />
SAP-Instanzen auf einem Rechner geben. In diesem Fall existieren<br />
mehrere Dispatcher <strong>und</strong> mehrere Puffersätze. Ein <strong>Applikationsserver</strong><br />
ist ein Rechner, auf dem mindestens eine SAP-Instanz läuft.<br />
Jedes SAP-System besitzt genau eine <strong>Datenbank</strong>. Als <strong>Datenbank</strong><br />
bezeichnen wir die Datenbasis, die z. B. in Form <strong>von</strong> Dateien vorliegt.<br />
Die <strong>Datenbank</strong> ist der passive Teil des <strong>Datenbank</strong>systems.<br />
Der aktive Teil des <strong>Datenbank</strong>systems ist die <strong>Datenbank</strong>instanz, eine<br />
administrative Einheit, die den Zugriff auf eine <strong>Datenbank</strong> erlaubt.<br />
Eine <strong>Datenbank</strong>instanz besteht aus <strong>Datenbank</strong>prozessen <strong>und</strong> einem<br />
Satz <strong>von</strong> <strong>Datenbank</strong>puffern im Shared Memory eines Rechners. Ein<br />
<strong>Datenbank</strong>server ist ein Rechner, auf dem mindestens eine <strong>Datenbank</strong>instanz<br />
läuft. Ein Rechner kann zugleich <strong>Datenbank</strong>- <strong>und</strong> <strong>Applikationsserver</strong><br />
sein, wenn eine <strong>Datenbank</strong>instanz <strong>und</strong> eine SAP-Instanz<br />
darauf laufen.<br />
In der Regel operiert im SAP-Umfeld auf einer <strong>Datenbank</strong> nur eine<br />
<strong>Datenbank</strong>instanz. Beispiele für <strong>Datenbank</strong>systeme, bei denen auf<br />
76
<strong>Hardware</strong>analyse 2.2<br />
eine <strong>Datenbank</strong> mehrere <strong>Datenbank</strong>instanzen zugreifen, sind DB2<br />
<strong>und</strong> Oracle Parallel Server. Die Besonderheiten solcher parallelen<br />
<strong>Datenbank</strong>systeme werden in diesem Buch nicht behandelt.<br />
Als SAP-Systeme bezeichnen wir Softwarekomponenten <strong>von</strong> SAP mit<br />
dem SAP NetWeaver AS als Gr<strong>und</strong>lage. Im Einzelnen sind dies SAP<br />
ERP, SAP NetWeaver BW, SAP APO, SAP SRM <strong>und</strong> SAP NetWeaver<br />
Portal.<br />
SAP-System<br />
Im Sinne dieser Terminologie kann also z. B. ein SAP ERP-System aus<br />
ein oder zwei Systemen bestehen, je nachdem, ob der Java- <strong>und</strong> der<br />
<strong>ABAP</strong>-Teil auf einem gemeinsamen System mit einer <strong>Datenbank</strong><br />
(»Double-Stack«) oder auf zwei Systemen mit getrennten <strong>Datenbank</strong>en<br />
betrieben werden – dieser Terminologie folgt im Übrigen auch<br />
der SAP Solution Manager.<br />
Der Begriff Server wird in der Dokumentation <strong>und</strong> der Literatur<br />
mehrdeutig verwendet. Er kann sowohl einen Rechner bezeichnen,<br />
z. B. im Begriff <strong>Datenbank</strong>server, als auch einen logischen Service, z. B.<br />
in den Begriffen Message-Server <strong>und</strong> ATP-Server. So verwenden wir<br />
auch <strong>ABAP</strong>-Server bzw. Java-Server als Kurzformen für den SAP Net-<br />
Weaver Application Server (AS) <strong>ABAP</strong> bzw. Java.<br />
Server<br />
2.2 <strong>Hardware</strong>analyse<br />
Das Werkzeug zur <strong>Analyse</strong> <strong>von</strong> <strong>Hardware</strong>engpässen <strong>und</strong> Betriebssystemproblemen<br />
ist der Betriebssystemmonitor. Um diesen Monitor<br />
für den <strong>Applikationsserver</strong> zu starten, auf dem Sie zurzeit angemeldet<br />
sind, wählen Sie:<br />
Betriebssystemmonitor<br />
Werkzeuge Administration Monitor Performance <br />
Betriebssystem Lokal Betriebssystemmonitor<br />
Alternativ können Sie den Transaktionscode ST06 verwenden. Sie<br />
gelangen auf den Hauptbildschirm des Betriebssystemmonitors.<br />
Zu Basis-Version 7.10 wurde der Betriebssystemmonitor überarbeitet.<br />
Nach dieser Überarbeitung führen die drei Transaktionscodes<br />
OS06, OS07 <strong>und</strong> ST06 auf einen Monitor, mit dem sowohl der lokale<br />
als auch entfernte Rechner überwacht werden können. Bei Versionen<br />
vor 7.10 stehen die neuen Transaktionen unter den Transaktionscodes<br />
OS06N, OS07N <strong>und</strong> ST06N zur Verfügung, mit den Transaktions-<br />
Aufruf <strong>und</strong><br />
Verfügbarkeit<br />
77
2<br />
<strong>Analyse</strong> <strong>von</strong> <strong>Hardware</strong>, <strong>Datenbank</strong> <strong>und</strong> <strong>ABAP</strong>-<strong>Applikationsserver</strong><br />
codes OS06, OS07 <strong>und</strong> ST06 erreichen Sie nach wie vor die älteren<br />
Transaktionen. Alle Informationen, die wir in diesem Buch besprechen,<br />
stehen Ihnen auch in den alten Transaktionen zur Verfügung.<br />
Die Detailanalysen finden Sie über die Navigation mit der Schaltfläche<br />
Detail Analysis Menu.<br />
Der Betriebssystemmonitor lässt sich auch aus der Serverübersicht<br />
heraus aufrufen:<br />
Werkzeuge Administration Monitor Systemüberwachung <br />
Server (Transaktionscode SM51)<br />
Positionieren Sie anschließend den Cursor auf dem gewünschten<br />
<strong>Applikationsserver</strong>, <strong>und</strong> wählen Sie im Menü Springen Monitore <br />
OS-Monitor.<br />
Aufbau<br />
Der Bildschirm des Betriebssystemmonitors teilt sich in drei Bereiche<br />
(siehe Abbildung 2.1).<br />
Abbildung 2.1 Hauptbildschirm des Betriebssystemmonitors<br />
78
<strong>Hardware</strong>analyse 2.2<br />
Im linken oberen Fenster finden Sie die Auswahl der Rechner, die<br />
überwacht werden. Dort können Sie einen Rechner auswählen, den<br />
Sie analysieren wollen. Im linken unteren Fenster wählen Sie die<br />
<strong>Analyse</strong>daten aus. Die Daten zum ausgewählten Rechner <strong>und</strong> zur ausgewählten<br />
<strong>Analyse</strong> finden Sie im rechten Fenster.<br />
Standardmäßig finden Sie alle Rechner, auf denen SAP-<strong>ABAP</strong>-Instanzen<br />
installiert wurden, in der Auswahlliste. Gr<strong>und</strong>sätzlich lässt sich<br />
aber jeder Rechner in den Remote-Betriebssystemmonitor einbinden,<br />
sofern dort ein Monitoring-Agent installiert ist. Dringend empfohlen<br />
wird dies für Rechner, auf denen eine Stand-alone-<strong>Datenbank</strong>,<br />
eine SAP-Java-Instanz oder ein TREX läuft.<br />
Beachten Sie, dass Sie diesen Monitor auch dann einrichten sollten,<br />
wenn Sie mit einem Werkzeug eines anderen Herstellers die Auslastung<br />
Ihrer Rechner überwachen. Sollten Sie Support <strong>von</strong> SAP benötigen,<br />
kann ein Experte <strong>von</strong> SAP nur über den SAP-eigenen Monitor<br />
die Rechner analysieren.<br />
SAP-Support<br />
2.2.1 <strong>Analyse</strong> eines <strong>Hardware</strong>engpasses<br />
(CPU <strong>und</strong> Hauptspeicher)<br />
Eine Übersicht über die wichtigsten Betriebssystem- <strong>und</strong> <strong>Hardware</strong>daten<br />
finden Sie unter dem Punkt Snapshot in der <strong>Analyse</strong>auswahl<br />
des Betriebssystemmonitors (siehe Abbildung 2.1). Alle Daten des<br />
Betriebssystemmonitors werden vom Hilfsprogramm saposcol im<br />
Zehn-Sek<strong>und</strong>en-Rhythmus aufgefrischt. Ein Auffrischen der Daten<br />
mit der entsprechenden Drucktaste ergibt also nur dann neue Daten,<br />
wenn zehn Sek<strong>und</strong>en verstrichen sind.<br />
Im Abschnitt CPU finden Sie die Felder Benutzerauslastung, Systemauslastung<br />
<strong>und</strong> Leerlauf. Diese Werte zeigen an, wie viel Prozent der<br />
CPU-Kapazität augenblicklich <strong>von</strong> Benutzerprozessen (d. h. vom SAP-<br />
System, der <strong>Datenbank</strong> <strong>und</strong> weiteren Prozessen) <strong>und</strong> vom Betriebssystem<br />
selbst genutzt werden <strong>und</strong> wie viel Prozent derzeit frei sind. Das<br />
Feld Anzahl CPUs gibt die Anzahl der CPU-Fäden (»Threads«) an.<br />
Mittlere Prozesswartezeit ist die Anzahl der Prozesse, die auf einen<br />
freien Prozessor warten. Dieser Wert wird im Mittel über eine Minute,<br />
über fünf Minuten <strong>und</strong> über 15 Minuten angegeben. Die weiteren<br />
Werte im Abschnitt CPU sind für die Performanceanalyse weniger<br />
wichtig. Tabelle 2.1 gibt Ihnen einen Überblick über die Felder des<br />
Betriebssystemmonitors.<br />
CPU-Auslastung<br />
79
2<br />
<strong>Analyse</strong> <strong>von</strong> <strong>Hardware</strong>, <strong>Datenbank</strong> <strong>und</strong> <strong>ABAP</strong>-<strong>Applikationsserver</strong><br />
Feld<br />
Benutzerauslastung<br />
Systemauslastung<br />
Leerlauf<br />
Anzahl der CPUs<br />
Mittlere Prozesswartezeit<br />
Physischer Speicher<br />
Bedeutung<br />
CPU-Auslastung durch Benutzerprozesse<br />
(SAP-System, <strong>Datenbank</strong> etc.)<br />
CPU-Auslastung durch das Betriebssystem<br />
Freie CPU-Kapazität. Dieser Wert sollte mindestens<br />
20 % betragen, optimalerweise aber 35 %.<br />
Anzahl der CPU-Threads<br />
Anzahl der Prozesse, die auf die CPUs warten,<br />
gemittelt über eine, fünf bzw. 15 Minuten<br />
physisch vorhandener Hauptspeicher (RAM)<br />
in KB<br />
Tabelle 2.1 Felder des Betriebssystemmonitors<br />
Prozessoren, Kerne (Cores) <strong>und</strong> Fäden (Threads)<br />
Als Beschreibung der Rechnerausstattung findet man z. B. folgende Angaben:<br />
»zwei Prozessoren, acht Cores, 16 Threads, Prozessor des Herstellers X mit<br />
2.93 GHz Taktfrequenz«. Was bedeuten die Angaben über die Anzahl der<br />
Prozessoren, Kerne (Cores) <strong>und</strong> Fäden (Threads) für das SAP-System?<br />
Der Begriff Prozessor bezeichnet bekanntlich die zentrale Verarbeitungseinheit<br />
(Central Processing Unit, CPU) eines Rechners, die in der Lage ist, Programme<br />
auszuführen. Dabei unterscheidet man zwischen Einkernprozessoren <strong>und</strong><br />
Mehrkernprozessoren. Mehrkernprozessoren verfügen über mehrere vollständig<br />
ausgebaute Verarbeitungseinheiten (Kerne) auf einem Chip. Die einzelnen<br />
Kerne teilen sich lediglich den Bus, sind also als vollwertige CPUs anzusehen.<br />
Mehrfädige Prozessorkerne (Multi-Threaded-CPUs) verfügen über eine CPU,<br />
melden sich aber als mehrere CPUs am Betriebssystem an. Damit bilden sich<br />
für diese Kerne mehrere Warteschlangen, aus, zwischen denen der Kern hin<strong>und</strong><br />
herschaltet. Um diesen Wechsel zu optimieren, besitzt jeder Thread einen<br />
eigenen Registersatz, einschließlich Stack Pointer <strong>und</strong> Program Counter, damit<br />
kann ohne zusätzliche Prozessorzyklen zwischen den Threads geschaltet werden.<br />
Diese hardwareseitigen Threads sollten Sie jedoch nicht mit den Threads<br />
verwechseln, die die Anwendungsprozesse erzeugen (User- oder Software-<br />
Threads). Innerhalb eines Prozesses der <strong>Datenbank</strong>, des <strong>ABAP</strong>-, Java- oder<br />
TREX-Servers können mehrere (Software-)Threads erzeugt werden, die vom<br />
Betriebssystem in Zeitscheiben ausgeführt werden. Den Wechsel zwischen<br />
den (Software-)Threads bezeichnet man als Kontextwechsel. Unter diesem<br />
Gesichtspunkt kann man also sagen, dass zusätzliche (<strong>Hardware</strong>-)Threads<br />
Kontextwechsel zwischen (Software-)Threads begünstigen <strong>und</strong> damit den vorhandenen<br />
Kern besser auslasten helfen, allerdings <strong>von</strong> der Leistungssteigerung<br />
nicht ganz an einen zusätzlichen Kern heranreichen.<br />
80
<strong>Hardware</strong>analyse 2.2<br />
Der Abschnitt Memory enthält Informationen über den physisch vorhandenen<br />
Hauptspeicher (Feld Physischer Speicher) <strong>und</strong> Werte über<br />
das Betriebssystem-Paging. Unter Swap finden Sie den aktuell allokierten<br />
Auslagerungsspeicher (Swap-Space). Der Auslagerungsspeicher<br />
muss größer als die Summe des konfigurierten Speicherbereichs sein.<br />
Hauptspeicherauslastung<br />
Programmabbrüche durch Speicherknappheit<br />
Ist die Summe aus physischem Speicher <strong>und</strong> Auslagerungsspeicher kleiner<br />
als der vom SAP-System, <strong>von</strong> der <strong>Datenbank</strong> <strong>und</strong> anderen Programmen<br />
benötigte Speicher, kann es zu Speicherverwaltungsfehlern (d. h. zu Programmabbrüchen<br />
innerhalb des SAP-Systems), im schlimmsten Fall sogar<br />
zum Abbruch des Betriebssystems, kommen. Sie sollten also in jedem Fall<br />
den Auslagerungsspeicher ausreichend dimensionieren.<br />
Um einen Überblick über die CPU-Auslastung der letzten 24 St<strong>und</strong>en<br />
zu erhalten, wählen Sie im Betriebssystemmonitor die <strong>Analyse</strong><br />
Vorige St<strong>und</strong>en CPU. Sie gelangen auf den Bildschirm Vorige<br />
St<strong>und</strong>en CPU. Die Bedeutung der Felder ist dieselbe wie im Hauptbildschirm,<br />
nur sind die Werte über eine St<strong>und</strong>e gemittelt. Einen<br />
ähnlichen Überblick gibt es auch für die Hauptspeicherbelegung<br />
(Vorige St<strong>und</strong>en Speicher) <strong>und</strong> für den Auslagerungsspeicher etc.<br />
Historien: CPU <strong>und</strong><br />
Hauptspeicher<br />
Wann liegt ein CPU- bzw. ein Hauptspeicherengpass vor?<br />
Im St<strong>und</strong>enmittel sollte der freie CPU-Anteil Leerlauf mindestens<br />
20 % betragen, um auf kurze Lastspitzen reagieren zu können.<br />
Erwünscht sind sogar eher 35 % freie CPU-Kapazität. Für die Paging-<br />
Rate gelten folgende Richtwerte:<br />
Richtwerte<br />
<br />
<br />
Bei Rechnern, die eine <strong>Datenbank</strong>, eine Java-Instanz oder einen<br />
TREX beherbergen, sollten nur sehr geringe Paging-Raten zu beobachten<br />
sein, d. h., sie sollten so dimensioniert sein, dass der verfügbare<br />
Hauptspeicher den konfigurierten Speicherbereichen entspricht.<br />
Bei Rechnern, die ausschließlich <strong>ABAP</strong>-Instanzen tragen, können<br />
mäßige Paging-Raten <strong>von</strong> bis zu 20 % des physischen Hauptspeichers<br />
pro St<strong>und</strong>e toleriert werden.<br />
Dabei ist für Betriebssysteme, die kontinuierlich Speicher auslagern<br />
(z. B. Microsoft Windows), die Paged-in-Rate entscheidend, für<br />
andere Betriebssysteme hingegen, die erst bei Bedarf auslagern (die<br />
81
2<br />
<strong>Analyse</strong> <strong>von</strong> <strong>Hardware</strong>, <strong>Datenbank</strong> <strong>und</strong> <strong>ABAP</strong>-<strong>Applikationsserver</strong><br />
meisten UNIX-Derivate), die Paged-out-Rate. Umgekehrt bedeutet das<br />
Überschreiten dieser Richtwerte nicht automatisch, dass ein <strong>Hardware</strong>engpass<br />
vorliegt. Vielmehr sollten Sie in diesem Fall mithilfe des<br />
Workload-Monitors prüfen, ob sich die CPU-Auslastung bzw. die<br />
Paging-Rate negativ auf die Antwortzeiten auswirkt. Entsprechende<br />
<strong>Analyse</strong>n finden Sie in Abschnitt 3.4.1, »Allgemeines Performanceproblem<br />
analysieren«.<br />
Hauptspeicherengpass<br />
Wenn Sie in der Voranalyse hohe Paging-Raten auf mehreren Rechnern<br />
beobachten, sollten Sie den <strong>von</strong> den SAP-Instanzen <strong>und</strong> der <strong>Datenbank</strong><br />
allokierten Hauptspeicher berechnen (siehe die Abschnitte 2.4.3,<br />
»Anzeige des allokierten Speichers«, <strong>und</strong> 2.3.2, »<strong>Analyse</strong> der <strong>Datenbank</strong>puffer«).<br />
Vergleichen Sie diesen mit dem physisch vorhandenen<br />
Hauptspeicher. Erfahrungen zeigen, dass es in der Regel unkritisch ist,<br />
50 % mehr Speicher virtuell zu allokieren, als physisch vorhanden sind.<br />
Bei den Betriebssystemen Microsoft Windows <strong>und</strong> Oracle Solaris<br />
kann die Auswertung der Paging-Rate auf dem <strong>Datenbank</strong>server zu<br />
Fehlinterpretationen führen, da dort Schreib-/Lese-Operationen (I/O)<br />
unter gewissen Umständen ebenfalls als Paging gezählt werden. Vergleichen<br />
Sie dazu die SAP-Hinweise 124199 (Solaris) <strong>und</strong> 689818<br />
(Windows).<br />
Ursache <strong>von</strong> <strong>Hardware</strong>engpässen<br />
Ist nach den oben genannten Kriterien ein <strong>Hardware</strong>engpass auf<br />
einem oder mehreren Rechnern des SAP-Systems erkennbar, sind folgende<br />
Ursachen möglich:<br />
<br />
Falsche Lastverteilung<br />
Wenn Sie in einem verteilten System mit mehreren Rechnern auf<br />
mindestens einem Rechner einen <strong>Hardware</strong>engpass feststellen,<br />
während andere Rechner über ungenutzte Ressourcen verfügen,<br />
liegt vermutlich eine falsche Lastverteilung vor. In diesem Fall sollten<br />
Sie die SAP-Workprozesse <strong>und</strong> die Benutzer neu verteilen.<br />
Überaus wichtig ist es, dass der <strong>Datenbank</strong>server über genügend<br />
Ressourcen verfügt. Ein CPU- oder Hauptspeicherengpass auf dem<br />
<strong>Datenbank</strong>server führt dazu, dass die benötigten Daten aus der<br />
<strong>Datenbank</strong> nicht zügig bereitgestellt werden können, was sich wiederum<br />
negativ auf die Antwortzeiten innerhalb des gesamten Systems<br />
auswirkt.<br />
82
<strong>Hardware</strong>analyse 2.2<br />
<br />
CPU-Auslastung einzelner Programme<br />
Wählen Sie im Betriebssystemmonitor (Transaktionscode ST06)<br />
die <strong>Analyse</strong> Snapshot Top CPU processes. Sie gelangen in die<br />
Übersicht der Betriebssystemprozesse. Diese gibt Ihnen einen<br />
Überblick über die derzeit aktiven Prozesse <strong>und</strong> deren Ressourcenauslastung.<br />
Abbildung 2.2 zeigt eine solche Übersicht für ein System, auf dem<br />
eine <strong>ABAP</strong>-Instanz <strong>und</strong> eine DB2-<strong>Datenbank</strong> installiert sind. Folgende<br />
Prozesse können Sie identifizieren:<br />
Übersicht der<br />
Betriebssystemprozesse<br />
<br />
<br />
dw_: SAP-Workprozess der SAP-<strong>ABAP</strong>-Instanz auf<br />
einem UNIX-Betriebssystem. Auf Windows-Betriebssystemen lautet<br />
die Bezeichnung disp+work.<br />
db2sysc: <strong>Datenbank</strong>prozess der DB2-<strong>Datenbank</strong>. Die Prozesse<br />
anderer <strong>Datenbank</strong>en führen in der Regel ihre Markenbezeichnung<br />
(z. B. Oracle) im Prozess- oder Benutzernamen.<br />
Abbildung 2.2 <strong>Analyse</strong> der Top-CPU-Prozesse im Betriebssystemmonitor<br />
83
2<br />
<strong>Analyse</strong> <strong>von</strong> <strong>Hardware</strong>, <strong>Datenbank</strong> <strong>und</strong> <strong>ABAP</strong>-<strong>Applikationsserver</strong><br />
Betriebssystemprozesse, die Sie anhand der folgenden Namensbestandteile<br />
erkennen können, gehören außerdem zu SAP-Instanzen:<br />
<br />
<br />
<br />
<br />
jstart ...: Serverprozess der SAP-Java-Instanz<br />
TREX ...: TREX-Prozess, der Servertyp kann dem Prozessnamen<br />
entnommen werden, z. B. Index-Server, Präprozessor etc.<br />
icman ...: Prozess des Internet Communication Managers (ICM)<br />
saposcol ...: Hilfsprogramm, das u. a. die Daten für den Betriebssystemmonitor<br />
sammelt<br />
<strong>Analyse</strong> der CPU-<br />
Auslastung<br />
Beobachten Sie durch Auffrischen des Monitors, ob einzelne Prozesse<br />
über längere Zeit hinweg die CPU stark belasten (Spalte CPU (%)).<br />
Handelt es sich bei den Prozessen, die die CPU stark belasten, um Prozesse<br />
der SAP-Basis oder der <strong>Datenbank</strong>, finden Sie in den im Folgenden<br />
genannten Monitoren weitere Informationen über die Tätigkeiten<br />
der Prozesse. Starten Sie den Monitor in einem zweiten Modus,<br />
identifizieren Sie anhand der Prozess-ID, die Sie auch in den entsprechenden<br />
Basismonitoren finden, den Prozess mit der hohen CPU-<br />
Auslastung, <strong>und</strong> entnehmen Sie den Monitoren, welches Programm<br />
bzw. welche Tabelle, Anfrage etc. der Prozess gerade bearbeitet.<br />
<br />
<br />
<br />
<br />
<br />
SAP-Workprozesse der <strong>ABAP</strong>-Instanz<br />
Starten Sie in einem zweiten Modus die SAP-Workprozess-Übersicht<br />
(siehe Abschnitt 2.5, »<strong>Analyse</strong> der SAP-Workprozesse«). Der<br />
Workprozess-Übersicht entnehmen Sie u. a. den Namen des laufenden<br />
<strong>ABAP</strong>-Programms <strong>und</strong> des zugehörigen Benutzers.<br />
Serverprozess der Java-Instanz<br />
Starten Sie die SAP Management Console (siehe Abschnitt 10.3,<br />
»SAP Management Console«). Prozessinterna erhalten Sie durch<br />
einen Thread-Dump.<br />
TREX-Prozesse<br />
Starten Sie das TREX-Administrationswerkzeug (siehe Abschnitt<br />
14.2, »Performanceanalyse auf dem TREX durchführen«). Im<br />
Monitor Services finden Sie Details zu den TREX-Services.<br />
ICM<br />
Starten Sie den ICM-Monitor (siehe Abschnitt 2.6, »<strong>Analyse</strong> des<br />
Internet Communication Managers (ICM)«).<br />
<strong>Datenbank</strong>prozesse<br />
Starten Sie im DBA-Cockpit den <strong>Datenbank</strong>prozessmonitor (siehe<br />
Abschnitt 2.3.3, »Identifizierung teurer SQL-Anweisungen«), um<br />
84
<strong>Hardware</strong>analyse 2.2<br />
die SQL-Anweisungen zu identifizieren, die aktuell <strong>von</strong> der <strong>Datenbank</strong><br />
bearbeitet werden.<br />
Die Prozessübersicht auf Betriebssystemebene bietet Ihnen also<br />
zusammen mit den genannten Monitoren vergleichsweise bequem<br />
die Möglichkeit, Programme, Transaktionen bzw. SQL-Anweisungen<br />
oder TREX-Anfragen mit hoher CPU-Auslastung zu identifizieren.<br />
Ein CPU-Engpass kann durch externe Prozesse verursacht werden. Finden<br />
Sie in der Prozessübersicht externe Prozesse (d. h. Prozesse, die<br />
nicht direkt zum SAP-System gehören) mit einem hohen CPU-Konsum,<br />
die zu einem CPU-Engpass führen, sollten Sie prüfen, ob diese<br />
für den Betrieb Ihres Systems notwendig sind oder ob sie abgeschaltet<br />
oder auf einen anderen Rechner verlagert werden können. Beispiele<br />
für externe Prozesse sind: Verwaltungssoftware, Virenscanner,<br />
Backup, externe Systeme, Bildschirmschoner (!) etc.<br />
Externe Prozesse<br />
Identifizierung eines CPU-Engpasses<br />
Sie beobachten während Ihrer Hauptarbeitszeit einen CPU-Engpass. In der<br />
Prozessübersicht des Betriebssystemmonitors stellen Sie fest, dass ein SAP-<br />
Workprozess über Minuten hinweg eine CPU-Auslastung <strong>von</strong> 30 % zeigt.<br />
In der SAP-Workprozess-Übersicht identifizieren Sie ein lang laufendes<br />
Hintergr<strong>und</strong>programm. In diesem Fall sollten Sie prüfen, ob dieses Hintergr<strong>und</strong>programm<br />
zu Zeiten niedriger Dialoglast eingeplant werden kann.<br />
Analog dem Vorgehen bei einem CPU-Engpass können Sie sich bei<br />
einem Hauptspeicherengpass auf die Suche nach Programmen mit<br />
hohem Speicherbedarf machen. Vergleichen Sie dazu Kapitel 6,<br />
»Speicherkonfiguration«.<br />
Betriebssysteme verwalten in der Regel einen eigenen File System<br />
Cache. Dieser Cache konkurriert mit dem SAP-System <strong>und</strong> der <strong>Datenbank</strong><br />
um die Nutzung des Hauptspeichers. Ist der Cache zu groß eingestellt,<br />
kommt es zu hohen Paging-Raten, obwohl mehr physischer<br />
Hauptspeicher verfügbar ist, als durch SAP-System <strong>und</strong> <strong>Datenbank</strong><br />
allokiert wurden. Wir empfehlen Ihnen, diesen Cache auf 7 bis 10 %<br />
des physischen Speichers zu reduzieren.<br />
Die Betriebssystemparameter zur Einstellung des File System Caches<br />
sind z. B. dbc_max_pct bei HP-UX, ubc-maxpercent bei Digital UNIX<br />
<strong>und</strong> maxperm bei AIX.<br />
Speicherbedarf<br />
einzelner<br />
Programme<br />
File System Cache<br />
minimieren<br />
UNIX<br />
85
2<br />
<strong>Analyse</strong> <strong>von</strong> <strong>Hardware</strong>, <strong>Datenbank</strong> <strong>und</strong> <strong>ABAP</strong>-<strong>Applikationsserver</strong><br />
Windows<br />
Um den Microsoft Windows File Cache zu minimieren, rufen Sie die<br />
Netzwerkeinstellung (Symbol: Network) im Control Panel Ihres<br />
Windows-Betriebssystems auf. Wählen Sie die Registerkarte Services,<br />
Service Server, Schaltfläche Properties. Wählen Sie in der folgenden<br />
Maske unter Optimization die Option Maximize Throughput<br />
for Network Applications aus, <strong>und</strong> bestätigen Sie mit OK. Um<br />
den so reduzierten File Cache zu aktivieren, muss der Rechner neu<br />
gestartet werden.<br />
Ein Hauptspeicherengpass kann zu einem erhöhten CPU-Konsum<br />
aufgr<strong>und</strong> starken Pagings <strong>und</strong> damit zum CPU-Engpass führen. Die<br />
Beseitigung des Hauptspeicherengpasses kann also unter Umständen<br />
ein Verschwinden des CPU-Engpasses mit sich bringen.<br />
2.2.2 Identifizierung <strong>von</strong> Schreib-/Lese-(I/O-)Problemen<br />
Im Betriebssystemmonitor (Transaktionscode ST06) finden Sie in der<br />
<strong>Analyse</strong>sicht Snapshot Platte u. a. Informationen über die Auslastung<br />
der Festplatten <strong>und</strong> – sofern das Betriebssystem diese korrekt<br />
zur Verfügung stellt – über Warte- <strong>und</strong> Antwortzeiten der Platten.<br />
Festplattenmonitor<br />
Durch einen Doppelklick auf eine Zeile erhalten Sie für die ausgewählte<br />
Festplatte einen Überblick über die mittleren Antwortzeiten<br />
innerhalb der letzten 24 St<strong>und</strong>en. Tabelle 2.2 listet die angezeigten<br />
Felder <strong>und</strong> ihre Bedeutung auf.<br />
Feld<br />
Disk<br />
Auslastung (%)<br />
Queue-Länge<br />
Wartezeit (ms)<br />
Servicezeit (ms)<br />
Übertragung (KB/s)<br />
Operationen (per Sec)<br />
Antwortzeit (ms)<br />
Bedeutung<br />
Name der Festplatte auf Betriebssystemebene<br />
Auslastung der Platte (in Prozent)<br />
Anzahl der Prozesse, die auf I/O-Operationen<br />
warten<br />
Wartezeit (in Millisek<strong>und</strong>en)<br />
Servicezeit (in Millisek<strong>und</strong>en)<br />
Übertragungsrate (in KB/Sek<strong>und</strong>e)<br />
Anzahl der I/O-Operationen (pro Sek<strong>und</strong>e)<br />
mittlere Antwortzeit der Festplatte (in Millisek<strong>und</strong>en)<br />
Tabelle 2.2 Felder des Festplattenmonitors<br />
86
<strong>Hardware</strong>analyse 2.2<br />
Stellen Sie anhand dieser Monitore fest, dass einzelne Platten stark<br />
ausgelastet sind (Auslastung (%) > 50 %), liegt ein potenzieller I/O-<br />
Engpass vor. Aus dem SAP-System heraus ist allerdings nur eine sehr<br />
beschränkte Aussage über I/O-Probleme möglich. Eine detaillierte<br />
<strong>Analyse</strong> kann nur mit Mitteln des <strong>Hardware</strong>partners durchgeführt<br />
werden.<br />
I/O-Engpass<br />
Ein I/O-Engpass ist insbesondere dann kritisch, wenn auf dieser Festplatte<br />
der Auslagerungsspeicher des Betriebssystems liegt. Darüber<br />
hinaus ist der Betriebssystemmonitor für den <strong>Datenbank</strong>server <strong>von</strong><br />
besonderem Interesse. Zusammen mit dem <strong>Datenbank</strong>monitor können<br />
mit dieser Anzeige Engpässe beim Lesen bzw. Schreiben auf die<br />
Festplatten eingegrenzt werden. Weitere Details zu diesem Problem<br />
finden Sie in Abschnitt 2.2.2, »Identifizierung <strong>von</strong> Schreib-/Lese-(I/O-)<br />
Problemen«.<br />
2.2.3 Weitere <strong>Analyse</strong>n auf Betriebssystemebene<br />
Das SAP-System protokolliert für UNIX-Betriebssysteme alle Änderungen<br />
der Betriebssystemparameter. Das Änderungsprotokoll kann<br />
über den folgenden Pfad im Betriebssystemmonitor angezeigt werden:<br />
Weitere Funktionen Parameteränderungen. Positionieren<br />
Sie den Cursor auf dem Namen eines Servers, <strong>und</strong> wählen Sie die<br />
Schaltfläche History of File. Anhand des Änderungsprotokolls lässt<br />
sich feststellen, ob Performanceprobleme eventuell erst nach Parameteränderungen<br />
aufgetreten sind <strong>und</strong> damit in Zusammenhang gebracht<br />
werden können.<br />
Mit dem Werkzeug Weitere Funktionen LAN-Überprüfung mit<br />
Ping lässt sich ein grober Netzwerktest durchführen. Sie können<br />
beliebige <strong>Datenbank</strong>-, Applikations- oder Präsentationsserver auswählen<br />
<strong>und</strong> die Netzwerkverbindung (z. B. die Antwortzeiten <strong>und</strong><br />
Datenverluste) testen. Auch wenn der Name der <strong>Analyse</strong> fälschlicherweise<br />
LAN-Überprüfung heißt, können auch Rechner im WAN angesprochen<br />
werden. Ein Beispiel für eine <strong>Analyse</strong> mit diesem Werkzeug<br />
finden Sie in Abschnitt 8.1.2, »Performance der GUI-Kommunikation<br />
analysieren <strong>und</strong> optimieren«.<br />
Parameteränderungen<br />
Netzwerk-Check<br />
87
2<br />
<strong>Analyse</strong> <strong>von</strong> <strong>Hardware</strong>, <strong>Datenbank</strong> <strong>und</strong> <strong>ABAP</strong>-<strong>Applikationsserver</strong><br />
Zusammenfassung<br />
Die Gefahr eines <strong>Hardware</strong>engpasses besteht, wenn:<br />
<br />
<br />
<br />
im St<strong>und</strong>enmittel weniger als 20 % CPU-Kapazität frei sind<br />
mehr als 20 % des physischen Hauptspeichers pro St<strong>und</strong>e ausgelagert<br />
(»gepaged«) werden<br />
einzelne Festplatten der <strong>Datenbank</strong> zu mehr als 50 % ausgelastet<br />
sind<br />
Insbesondere die Überlastung des <strong>Datenbank</strong>servers kann zu Performanceproblemen<br />
führen, die sich systemweit auswirken. Prüfen Sie<br />
mithilfe des Workload-Monitors, ob sich die hohe CPU-Auslastung<br />
bzw. die hohen Paging-Raten negativ auf die Antwortzeiten des SAP-<br />
Systems bzw. der <strong>Datenbank</strong> auswirken (siehe Abschnitt 3.4, »Workload-<strong>Analyse</strong><br />
durchführen«).<br />
<strong>Hardware</strong>engpass<br />
analysieren<br />
Abbildung 2.3 <strong>und</strong> Abbildung 2.4 zeigen den <strong>Analyse</strong>pfad bei einem<br />
<strong>Hardware</strong>engpass: Häufig kann ein <strong>Hardware</strong>engpass durch die Neuverteilung<br />
der Last (z. B. durch das Verlagern <strong>von</strong> Workprozessen)<br />
behoben werden. Ursachen für einen CPU-Engpass sind z. B. ineffiziente<br />
Applikationen, die im <strong>Datenbank</strong>prozessmonitor <strong>und</strong> in der<br />
Workprozess-Übersicht identifiziert werden können, oder externe,<br />
nicht zu einer SAP-Instanz bzw. der <strong>Datenbank</strong>instanz gehörende<br />
Prozesse. Daher muss immer eine vollständige Performanceanalyse<br />
durchgeführt werden, bevor endgültig entschieden werden kann, ob<br />
die vorhandene <strong>Hardware</strong> für die gegebenen Anforderungen an das<br />
SAP-System ausreicht oder nicht.<br />
Die Flussdiagramme in Abbildung 2.3 <strong>und</strong> Abbildung 2.4 zeigen<br />
Ihnen schematisch das Vorgehen bei einem <strong>Hardware</strong>engpass. Sie<br />
verweisen auf später in diesem Buch beschriebene Monitore <strong>und</strong><br />
<strong>Analyse</strong>n. Sie werden ähnliche Diagramme an vielen Stellen dieses<br />
Buches finden.<br />
88
<strong>Datenbank</strong>analyse 2.3<br />
Betriebssystemmonitor (Transaktionscode ST06)<br />
Hohe CPU-Auslastung (CPU idle im St<strong>und</strong>enmittel < 35%)<br />
Ist noch CPU-Speicherkapazität auf anderen Rechnern des Systems frei?<br />
SAP-Workprozesse <strong>und</strong> Benutzer neu verteilen!<br />
Betriebssystemmonitor (Transaktionscode ST06): Top-CPU-Prozesse<br />
SAP-Workprozesse mit hoher CPU-Auslastung<br />
Workprozess-Übersicht (Transaktionscode SM50 oder SM66)<br />
Detailanalyse des <strong>ABAP</strong>-Programms (mit <strong>ABAP</strong>-Trace SE30)<br />
<strong>Datenbank</strong>prozesse mit hoher CPU-Auslastung?<br />
<strong>Datenbank</strong>prozessmonitor (DBA-Cockpit, z. B. DB2 Applications)<br />
Detailanalyse teurer SQL-Anweisungen<br />
Externe Prozesse mit hoher CPU-Auslastung?<br />
Abschalten, optimieren oder verlagern!<br />
Abbildung 2.3 Detailanalyse eines <strong>Hardware</strong>engpasses (CPU)<br />
Betriebssystemmonitor (Transaktionscode ST06)<br />
Hohe Paging-Rate (Paging pro St<strong>und</strong>e > 20 % des RAM)?<br />
Ist noch CPU- <strong>und</strong> Speicherkapazität auf anderen Rechnern des Systems frei?<br />
SAP-Workprozesse <strong>und</strong> Benutzer neu verteilen<br />
File System Cache > 10 % des RAM?<br />
File System Cache reduzieren<br />
SAP-Speicherkonfigurationsmonitor (Transaktionscode ST02): Modusliste<br />
Benutzer mit hohem Speicherverbrauch?<br />
Detailanalyse der Aktionen des Benutzers<br />
Abbildung 2.4 Detailanalyse eines <strong>Hardware</strong>engpasses (Hauptspeicher)<br />
2.3 <strong>Datenbank</strong>analyse<br />
Der SAP NetWeaver Application Server (AS) kann zurzeit mit acht<br />
verschiedenen relationalen <strong>Datenbank</strong>systemen sowie mit der<br />
Hauptspeicherdatenbank SAP HANA betrieben werden. Auch wenn<br />
diese <strong>Datenbank</strong>systeme alle eine unterschiedliche Architektur besit-<br />
89
Sperren auf <strong>Datenbank</strong>tabellen oder Geschäftsobjekten sind<br />
die Voraussetzung für konsistente Daten. Werden Sperren zu<br />
lange gehalten, kann es im System zu Performanceproblemen<br />
kommen, da Benutzer <strong>und</strong> Prozesse auf die Freigabe der Sperren<br />
warten müssen. Dieses Kapitel stellt detailliert die Sperrkonzepte<br />
<strong>und</strong> deren Überwachung dar.<br />
9 Sperren<br />
In einem SAP-System können viele Benutzer gleichzeitig Inhalte <strong>von</strong><br />
<strong>Datenbank</strong>tabellen lesen. Bei Änderungen des Datenbestands ist es<br />
jedoch notwendig, sicherzustellen, dass zu einem bestimmten Zeitpunkt<br />
nur genau ein Benutzer einen bestimmten Tabelleninhalt<br />
ändern kann. Zu diesem Zweck werden Tabelleninhalte während der<br />
Änderung gesperrt. Die Sperrkonzepte <strong>von</strong> SAP-System <strong>und</strong> <strong>Datenbank</strong>system<br />
werden im ersten Abschnitt dieses Kapitels erklärt.<br />
Werden Sperren lange Zeit gehalten, kann es zu Wartesituationen<br />
kommen, die den Durchsatz des SAP-Systems beschränken. Mit allgemeinen<br />
Performanceaspekten <strong>von</strong> Sperren beschäftigt sich der zweite<br />
Abschnitt dieses Kapitels.<br />
Für die Verfügbarkeitsprüfung nach ATP-Logik (Available to Promise)<br />
<strong>und</strong> die Nummernvergabe für Dokumente verwendet das SAP-System<br />
spezielle Pufferungstechniken, die die Sperrzeit minimieren <strong>und</strong><br />
den Durchsatz maximieren sollen. Diese Techniken werden im dritten<br />
<strong>und</strong> vierten Abschnitt diskutiert.<br />
Wann sollten Sie dieses Kapitel lesen?<br />
Dieses Kapitel sollten Sie lesen:<br />
<br />
<br />
um sich über <strong>Datenbank</strong>sperren <strong>und</strong> SAP-Sperren (SAP-Enqueues)<br />
zu informieren<br />
wenn Sie in Ihrem SAP-System Probleme mit <strong>Datenbank</strong>sperren<br />
oder SAP-Enqueues identifiziert haben <strong>und</strong> diese detaillierter analysieren<br />
wollen<br />
403
9<br />
Sperren<br />
Dieses Kapitel ist keine Anleitung zur Entwicklung <strong>von</strong> SAP-Transaktionen.<br />
Dazu verweisen wir Sie auf <strong>ABAP</strong>-Lehrbücher oder die SAP-<br />
Onlinehilfe.<br />
9.1 Sperrkonzepte <strong>von</strong> <strong>Datenbank</strong>system <strong>und</strong><br />
SAP-System<br />
Datenkonsistenz<br />
Die Konsistenz der Daten in einem <strong>Datenbank</strong>- oder SAP-System wird<br />
durch Sperren realisiert. Das SAP-System <strong>und</strong> das <strong>Datenbank</strong>system<br />
bieten jeweils eigene Sperrkonzepte an, die zwar beide demselben<br />
Zweck dienen (nämlich die Datenkonsistenz zu gewährleisten), aber<br />
unterschiedliche technische Realisierungen <strong>und</strong> Einsatzbereiche<br />
haben. Sperren, die vom <strong>Datenbank</strong>system verwaltet werden, heißen<br />
<strong>Datenbank</strong>sperren (Database Locks), die vom SAP-System verwalteten<br />
Sperren heißen SAP-Enqueues.<br />
Bestellen eines Computers<br />
Beim Konfigurieren <strong>und</strong> Bestellen eines neuen Computers muss geprüft<br />
werden, ob alle gewünschten Komponenten zur Verfügung stehen, z. B.<br />
Gehäuse, CPU, Hauptspeicher, Festplatte etc. Dabei gilt der Gr<strong>und</strong>satz<br />
»ganz oder gar nicht«, d. h., wenn eine Komponente ausverkauft ist, kann<br />
die Verfügbarkeit des gesamten Rechners nicht bestätigt werden. Wird<br />
nun die Verfügbarkeit der unterschiedlichen Komponenten nacheinander<br />
geprüft, muss für diesen Prüfzeitraum sichergestellt werden, dass andere<br />
Benutzer nicht auf die einmal geprüften <strong>und</strong> bestätigten Komponenten zugreifen,<br />
bis die gesamte Bestellung endgültig bestätigt oder abgebrochen<br />
wurde.<br />
9.1.1 <strong>Datenbank</strong>sperren<br />
<strong>Datenbank</strong>sperren werden vom Lock Handler der <strong>Datenbank</strong>instanz<br />
verwaltet. Die gesperrte Einheit ist eine Zeile einer <strong>Datenbank</strong>tabelle<br />
(spezielle Ausnahmen werden am Ende <strong>von</strong> Abschnitt 9.2.1, »<strong>Datenbank</strong>sperren«<br />
erläutert). <strong>Datenbank</strong>sperren werden bei allen ändernden<br />
SQL-Anweisungen (UPDATE, INSERT, DELETE) sowie bei der<br />
Anweisung SELECT FOR UPDATE gesetzt. Sie werden so lange gehalten,<br />
bis mit der SQL-Anweisung COMMIT (<strong>Datenbank</strong>-Commit) alle Änderungen<br />
auf der <strong>Datenbank</strong> für gültig erklärt <strong>und</strong> dann die <strong>Datenbank</strong>sperren<br />
gelöst werden. Den Zeitraum zwischen zwei <strong>Datenbank</strong>-<br />
404
Sperrkonzepte <strong>von</strong> <strong>Datenbank</strong>system <strong>und</strong> SAP-System 9.1<br />
Commits bezeichnet man als <strong>Datenbank</strong>transaktion. Alternativ können<br />
alle ändernden SQL-Anweisungen mit der SQL-Anweisung<br />
ROLLBACK (<strong>Datenbank</strong>-Rollback) zurückgenommen werden. In diesem<br />
Fall werden die gehaltenen <strong>Datenbank</strong>sperren ebenfalls gelöst.<br />
Bestellen eines Computers (Fortsetzung)<br />
Das oben erläuterte Beispiel der Verfügbarkeitsprüfung beim Bestellen<br />
eines Computers mithilfe <strong>von</strong> <strong>Datenbank</strong>sperren realisieren Sie in der Programmierung<br />
mit der SQL-Anweisung SELECT FOR UPDATE: Mit dieser Anweisung<br />
wird gleichzeitig der Bestand einer Komponente gelesen <strong>und</strong> eine<br />
Sperre auf den entsprechenden Bestand gesetzt. Haben Sie diese Prüfung<br />
für alle Komponenten erfolgreich durchgeführt, ändern Sie anschließend<br />
den Bestand (mit einem UPDATE auf die entsprechenden Zeilen) <strong>und</strong> geben<br />
mit einem COMMIT alle Sperren frei. Während eine Sperre besteht, können<br />
andere Benutzer die Daten zwar lesen (ein einfaches SELECT ist möglich),<br />
nicht aber selbst die Zeile sperren. Es kann also weder ein UPDATE noch ein<br />
SELECT FOR UPDATE durchgeführt werden. Eine solche Sperre bezeichnet<br />
man als exklusiv.<br />
Am Ende eines Transaktionsschrittes löst der SAP-Workprozess automatisch<br />
einen <strong>Datenbank</strong>-Commit (oder einen <strong>Datenbank</strong>-Rollback)<br />
aus. Damit werden alle <strong>Datenbank</strong>sperren gelöst. Daraus ergibt sich,<br />
dass <strong>Datenbank</strong>sperren nicht über mehrere Transaktionsschritte<br />
(d. h. im SAP-System über mehrere Eingabebildschirme) hinweg<br />
gehalten werden können.<br />
9.1.2 SAP-Enqueues<br />
Um Sperren über mehrere Schritte einer SAP-Transaktion hinweg zu<br />
halten, verwenden Sie die SAP-eigene Enqueue-Verwaltung. Die SAP-<br />
Enqueues werden vom Enqueue-Workprozess in der Enqueue-<br />
Tabelle verwaltet, die sich im Hauptspeicher befindet. Damit SAP-<br />
Enqueues auch beim Stoppen der SAP-Instanz erhalten bleiben, werden<br />
diese zusätzlich in einer lokalen Datei auf dem Enqueue-Server<br />
gesichert.<br />
Durch einen SAP-Enqueue wird ein logisches Objekt gesperrt. So<br />
können z. B. Zeilen aus mehreren <strong>Datenbank</strong>tabellen gesperrt werden,<br />
die zusammen einen Beleg bilden. Ein SAP-Enqueue kann auch<br />
eine oder mehrere Tabellen sperren. SAP-Enqueue-Objekte werden<br />
im <strong>ABAP</strong> Dictionary (Abschnitt Sperrobjekte) angelegt <strong>und</strong> geändert.<br />
Sie hängen eng mit den Begriffen SAP-Transaktion <strong>und</strong> SAP Logical<br />
SAP-Enqueue-<br />
Objekte<br />
405
9<br />
Sperren<br />
Unit of Work (SAP LUW) zusammen. Zu beiden Begriffen finden Sie<br />
umfangreiche Dokumentationen in der <strong>ABAP</strong>-Literatur zur Dialogprogrammierung.<br />
Die Funktionsweise <strong>und</strong> Anwendung dieser Techniken<br />
innerhalb <strong>von</strong> <strong>ABAP</strong>-Programmen wird daher an dieser Stelle<br />
nicht erläutert. Es soll genügen, hier die für eine Performanceanalyse<br />
relevanten Aspekte darzustellen. Werden Performanceprobleme aufgr<strong>und</strong><br />
eines fehlerhaften Einsatzes <strong>von</strong> SAP-Enqueues entdeckt, muss<br />
in jedem Fall der zuständige <strong>ABAP</strong>-Entwickler hinzugezogen werden.<br />
Ein SAP-Enqueue ist eine logische Sperre innerhalb des SAP-Systems.<br />
Eine direkt auf der <strong>Datenbank</strong> ausgeführte SQL-Anweisung oder ein<br />
k<strong>und</strong>eneigenes <strong>ABAP</strong>-Programm, das sich nicht an die SAP-Enqueue-<br />
Konventionen hält, kann eine Tabellenzeile in der <strong>Datenbank</strong> ändern,<br />
obwohl diese Zeile im SAP-System durch einen SAP-Enqueue<br />
gesperrt ist. SAP-Enqueues gelten also nur innerhalb des SAP-Systems.<br />
<strong>Datenbank</strong>sperren dagegen sind für alle Zugriffe wirksam. Sie<br />
sperren eine Tabellenzeile »hart« für alle <strong>Datenbank</strong>benutzer, also<br />
auch für solche außerhalb des SAP-Systems.<br />
Funktionsbausteine<br />
Zu jedem aktivierten SAP-Enqueue-Objekt existieren zwei Funktionsbausteine:<br />
ein Enqueue-Baustein <strong>und</strong> ein Dequeue-Baustein. Ein SAP-<br />
Enqueue wird innerhalb eines <strong>ABAP</strong>-Programms explizit durch den<br />
Aufruf des zugehörigen Enqueue-Bausteins gesetzt <strong>und</strong> explizit durch<br />
den entsprechenden Dequeue-Baustein freigegeben. SAP-Enqueues<br />
können damit über mehrere Transaktionsschritte gehalten werden.<br />
Alle SAP-Enqueues werden allerdings automatisch bei Beendigung<br />
einer SAP-Transaktion freigegeben.<br />
Bestellen eines Computers (Fortsetzung)<br />
Anhand unseres Beispiels der Rechnerkonfiguration <strong>und</strong> -bestellung erläutern<br />
wir die Funktionsweise der SAP-Enqueue-Verwaltung: Zum Rechner<br />
gehören z. B. Gehäuse, CPU, Hauptspeicher <strong>und</strong> Festplatte. Die einzelnen<br />
Komponenten werden auf unterschiedlichen Eingabebildschirmen, d. h.<br />
mit mehreren Transaktionsschritten, bearbeitet <strong>und</strong> zur Bearbeitung durch<br />
SAP-Enqueues gesperrt. Nachdem sichergestellt ist, dass jede Komponente<br />
einzeln reserviert werden kann, wird die Bestellung des Computers<br />
bestätigt. Damit ist der Dialogteil der Transaktion abgeschlossen.<br />
Ein Verbuchungs-Workprozess führt anschließend unter dem Schutz der<br />
SAP-Enqueues die notwendigen Änderungen der <strong>Datenbank</strong>tabellen aus.<br />
Erst nachdem der Verbuchungs-Workprozess seine Arbeit beendet hat, ist<br />
die SAP LUW abgeschlossen, <strong>und</strong> die SAP-Enqueues werden wieder freigegeben.<br />
406
Überwachung <strong>von</strong> Sperren 9.2<br />
Zu einer SAP LUW gehören eventuell noch Bausteine, die in der V2-<br />
Verbuchung bearbeitet werden. Dieses erfolgt ohne SAP-Enqueues.<br />
In Bausteinen, die V2-verbuchbar sind, dürfen also nur Informationen<br />
bearbeitet werden, die nicht des Schutzes durch SAP-Enqueues<br />
bedürfen (siehe auch Abschnitt 7.1.8, »Verbuchung«).<br />
Die wichtigsten Eigenschaften <strong>von</strong> <strong>Datenbank</strong>sperren <strong>und</strong> SAP-<br />
Enqueues fasst Tabelle 9.1 zusammen.<br />
Gesperrtes<br />
Objekt<br />
Sperre<br />
wird<br />
gesetzt<br />
Sperre<br />
wird freigegeben<br />
Maximale<br />
Haltedauer<br />
Verhalten<br />
bei Sperrkonflikt<br />
Wartesituation (Exclusive<br />
Lockwait, siehe auch<br />
Abschnitt 9.2.1, »<strong>Datenbank</strong>sperren«)<br />
Überwachung<br />
DB-Sperren (Locks)<br />
<br />
einzelne Zeile einer<br />
<strong>Datenbank</strong>tabelle<br />
implizit durch ändernde<br />
SQL-Anweisungen (z. B.<br />
UPDATE) <strong>und</strong> SELECT FOR<br />
UPDATE<br />
<br />
<br />
<br />
implizit durch SQL-<br />
Anweisung COMMIT<br />
bzw. ROLLBACK<br />
gr<strong>und</strong>sätzlich am Ende<br />
eines Transaktionsschrittes<br />
Länge eines Transaktionsschrittes<br />
Transaktionscode DB01,<br />
Exclusive Lockwaits<br />
SAP-Sperren (Enqueues)<br />
<br />
<br />
logisches Objekt (z. B. ein<br />
Beleg)<br />
definiert im <strong>ABAP</strong><br />
Dictionary<br />
explizit durch Aufruf eines<br />
Enqueue-Bausteins im<br />
<strong>ABAP</strong>-Programm<br />
<br />
<br />
explizit durch Aufruf eines<br />
Dequeue-Bausteins<br />
gr<strong>und</strong>sätzlich am Ende<br />
einer SAP-Transaktion<br />
über mehrere Transaktionsschritte<br />
hinweg<br />
programmabhängig, z. B.<br />
Fehlermeldung »Material X<br />
ist gesperrt«<br />
Transaktionscode SM12,<br />
Sperrverwaltung<br />
Tabelle 9.1 Eigenschaften <strong>von</strong> <strong>Datenbank</strong>sperren <strong>und</strong> SAP-Enqueues<br />
9.2 Überwachung <strong>von</strong> Sperren<br />
In diesem Abschnitt geben wir Ihnen Hinweise zur Überwachung<br />
<strong>von</strong> <strong>Datenbank</strong>sperren <strong>und</strong> SAP-Enqueues.<br />
407
9<br />
Sperren<br />
9.2.1 <strong>Datenbank</strong>sperren<br />
Exclusive<br />
Lockwaits<br />
Was geschieht bei einem Sperrkonflikt, d. h., wenn ein Workprozess<br />
ein Objekt sperren will, das bereits gesperrt ist? Bei <strong>Datenbank</strong>sperren<br />
wartet der zweite Prozess so lange, bis der Halter der Sperre diese<br />
wieder freigegeben hat. Diese Wartesituation bezeichnet man als<br />
Exclusive Lockwait. Bei den meisten <strong>Datenbank</strong>en gibt es keine zeitliche<br />
Beschränkung für diese Sperre. Wird die Sperre durch ein fehlerhaftes<br />
Verhalten des Programms nicht wieder freigegeben, kann die<br />
Wartesituation ad infinitum bestehen.<br />
Zu einer Eskalation kann es kommen, wenn ein Programm eine für das<br />
SAP-System »lebenswichtige« Sperre (z. B. auf die Nummernkreistabelle<br />
NRIV) hält <strong>und</strong> nicht wieder freigibt. In diesem Fall besteht die<br />
Gefahr, dass ein Workprozess nach dem anderen auf diese Sperre wartet.<br />
Sind schließlich alle Workprozesse belegt, besteht schließlich aus<br />
dem SAP-Systems heraus keine Möglichkeit des Eingreifens mehr. Es<br />
bleibt als letzte Alternative nur noch, mit Mitteln des Betriebssystems<br />
den fehlerhaften Prozess abzubrechen (sofern er dann noch ermittelt<br />
werden kann).<br />
Sperrwartesituation<br />
prüfen<br />
Die aktuellen Sperrwartesituationen werden im <strong>Datenbank</strong>-Sperrmonitor<br />
(Transaktionscode DB01) angezeigt, den Sie im DBA-Cockpit<br />
(Transaktionscode DBACOCKPIT) über Performance Wartesituationen<br />
auf Sperren <strong>und</strong> Deadlocks oder in der globalen Workprozess-Übersicht<br />
(Transaktionscode SM66) über Springen DB Locks<br />
starten können.<br />
Die Beschreibung dieses Monitors <strong>und</strong> Hinweise, wie Sie bei Sperrwartesituationen<br />
vorgehen können, finden Sie in Abschnitt 2.3.5,<br />
»Weitere <strong>Analyse</strong>n auf <strong>Datenbank</strong>ebene«. Sperrwartesituationen tragen<br />
zur <strong>Datenbank</strong>zeit bei <strong>und</strong> führen in den Statistiken des Workload-Monitors<br />
zu einer erhöhten <strong>Datenbank</strong>zeit. Von einigen <strong>Datenbank</strong>systemen<br />
werden Sperrwartezeiten explizit aufgezeichnet <strong>und</strong><br />
im <strong>Datenbank</strong>monitor angezeigt.<br />
Sperrsituation auf der <strong>Datenbank</strong><br />
Mit dem folgenden Beispielprogramm können Sie eine Sperrsituation auf<br />
der <strong>Datenbank</strong> provozieren:<br />
REPORT zts_lock.<br />
DATA: lv_text type natxt.<br />
SELECT SINGLE FOR UPDATE text FROM T100 INTO lv_text WHERE sprsl<br />
408
Überwachung <strong>von</strong> Sperren 9.2<br />
= 'DE' AND ARBGB = '00' AND msgnr = '001'.<br />
BREAK-POINT.<br />
Gehen Sie dazu wie folgt vor:<br />
1. Starten Sie das Programm in der <strong>ABAP</strong> Workbench (z. B. über Transaktionscode<br />
SE38). Nach wenigen Sek<strong>und</strong>en startet der Debugger, das<br />
Programm hält am Befehl BREAK-POINT an. Zuvor hat das Programm mit<br />
dem Befehl SELECT SINGLE FOR UPDATE eine <strong>Datenbank</strong>sperre gesetzt.<br />
Da das Programm im Debug-Modus wartet, wird diese <strong>Datenbank</strong>sperre<br />
nicht zurückgenommen.<br />
2. Starten Sie nun in einem zweiten Modus das Programm erneut. Im<br />
zweiten Modus wird Ihnen die Sanduhr angezeigt.<br />
3. Sie können das Programm erneut in einem dritten Modus starten, es<br />
wird Ihnen wiederum die Sanduhr angezeigt.<br />
4. Starten Sie in einem weiteren Modus den <strong>Datenbank</strong>sperrmonitor, wie<br />
zuvor beschrieben. Die Sperrsituation wird angezeigt, <strong>und</strong> Sie können<br />
erkennen, welcher Workprozess die Sperre hält <strong>und</strong> welcher wartet.<br />
Mithilfe der Workprozess-Übersicht (Transaktionscode SM50) <strong>und</strong> des<br />
<strong>Datenbank</strong>prozessmonitors können Sie nun analysieren, was der Prozess,<br />
der die Sperre hält, tut. In unserem Beispiel finden Sie als Status in<br />
der Prozessübersicht hält <strong>und</strong> als Gr<strong>und</strong> Debug.<br />
5. Gehen Sie nun in den Debugger, <strong>und</strong> führen Sie dort die Ausführung des<br />
Programms im ersten Modus fort. Das Programm wird beendet, die<br />
<strong>Datenbank</strong>sperre wird durch ein implizites Commit oder Rollback der<br />
<strong>Datenbank</strong>schnittstelle abgeräumt, <strong>und</strong> damit kann das Programm im<br />
zweiten Modus, das bisher beim Befehl SELECT SINGLE FOR UPDATE wartete,<br />
fortfahren. Es wird also innerhalb kürzester Zeit ebenfalls den<br />
Befehl BREAK-POINT erreichen <strong>und</strong> den Debugger starten.<br />
6. Setzen Sie auch im zweiten <strong>und</strong>, falls Sie das Programm in weiteren<br />
Modi gestartet haben, auch in diesen das Programm im Debugger fort,<br />
um die Sperren freizugeben.<br />
Gr<strong>und</strong>sätzlich müssen Sie in Programmen darauf achten, dass Sperren<br />
möglichst spät angefordert werden. Es ist also besser, zunächst<br />
alle benötigten Informationen <strong>von</strong> der <strong>Datenbank</strong> zu lesen <strong>und</strong> zu<br />
bearbeiten, bevor Änderungen in der <strong>Datenbank</strong> vorgenommen <strong>und</strong><br />
Sperren gesetzt werden. In Abbildung 9.1 ist dies schematisch dargestellt:<br />
Im oberen Teil der Abbildung werden während einer <strong>Datenbank</strong>transaktion<br />
mehrere Änderungen auf der <strong>Datenbank</strong> vorgenommen<br />
<strong>und</strong> damit <strong>Datenbank</strong>sperren unnötig lange gehalten. Der<br />
untere Teil der Abbildung zeigt die elegantere Art der Programmierung:<br />
Während der <strong>Datenbank</strong>transaktion werden die Änderungen<br />
in einer internen Tabelle gesammelt <strong>und</strong> erst zum Ende der Transak-<br />
Typische Probleme<br />
409
9<br />
Sperren<br />
tion gebündelt in der <strong>Datenbank</strong> ausgeführt. Folglich verkürzt sich<br />
die Sperrzeit auf der <strong>Datenbank</strong>.<br />
A)<br />
<strong>ABAP</strong><br />
<strong>Datenbank</strong><br />
Einzelne Updates<br />
<strong>Datenbank</strong>sperren<br />
COMMIT<br />
B)<br />
<strong>ABAP</strong><br />
APPEND TO <br />
SORT <br />
UPDATE FROM<br />
<br />
COMMIT<br />
<strong>Datenbank</strong><br />
<strong>Datenbank</strong>sperren<br />
DB LUW<br />
Abbildung 9.1 Sperren sollen möglichst spät gesetzt werden.<br />
Ursachen<br />
Eine Ursache <strong>von</strong> Sperrproblemen, die in SAP-Systemen immer wieder<br />
beobachtet wird, sind K<strong>und</strong>enmodifikationen <strong>von</strong> Verbuchungsbausteinen.<br />
Die Trennung <strong>von</strong> Dialog- <strong>und</strong> Verbuchungsverarbeitung<br />
bringt den Vorteil mit sich, dass im Dialogteil einer Transaktion nur<br />
wenige Änderungen auf der <strong>Datenbank</strong> vorgenommen <strong>und</strong> damit<br />
auch nur wenige Sperren gesetzt werden. Vielmehr werden diese im<br />
Verbuchungsteil der Transaktion konzentriert. Mitunter werden Verbuchungsbausteine<br />
modifiziert, um z. B. eine k<strong>und</strong>eneigene Schnittstelle<br />
mit Daten zu versorgen. Wird diese Modifikation durchlaufen,<br />
nachdem bereits Sperren gesetzt wurden, <strong>und</strong> ist diese Modifikation<br />
inperformant, weil sie z. B. eine lang laufende SQL-Anweisung enthält,<br />
kommt es zu massiven Sperrproblemen in der Verbuchungsverarbeitung.<br />
Eine zweite Quelle <strong>von</strong> Sperrproblemen sind Hintergr<strong>und</strong>programme,<br />
die eine Sperre anfordern <strong>und</strong> dann mehrere St<strong>und</strong>en arbeiten,<br />
ohne ein <strong>Datenbank</strong>-Commit auszulösen. Sollen die gesperrten<br />
Objekte ebenfalls <strong>von</strong> Dialogtransaktionen bearbeitet werden, müssen<br />
diese warten, bis das Hintergr<strong>und</strong>programm beendet ist oder ein<br />
Commit auslöst. Eine Lösung für dieses Problem kann es sein, das<br />
410
Überwachung <strong>von</strong> Sperren 9.2<br />
Hintergr<strong>und</strong>programm in regelmäßigen Abständen ein Commit auslösen<br />
zu lassen (wenn dies vom Standpunkt der Datenkonsistenz<br />
möglich ist) oder es nur zu Zeiten einzuplanen, in denen es den Dialogbetrieb<br />
nicht stört. Ähnliche Probleme treten bei der Parallelisierung<br />
<strong>von</strong> Hintergr<strong>und</strong>läufen auf, d. h., wenn dasselbe Programm<br />
mehrfach parallel gestartet wird. Diese Parallelisierung macht jedoch<br />
nur dann Sinn, wenn die Selektionsbedingungen so gewählt werden,<br />
dass sich die parallel laufenden Programme nicht gegenseitig die<br />
Daten sperren.<br />
Deadlocks<br />
Während Sie sich im <strong>ABAP</strong> Debugger befinden, wird in der Regel kein <strong>Datenbank</strong>-Commit<br />
ausgelöst, d. h., alle <strong>Datenbank</strong>sperren bleiben bestehen,<br />
bis Sie den Debugger wieder verlassen. Vermeiden Sie es daher, in<br />
einem produktiven SAP-System mit dem Debugger zu arbeiten.<br />
Im Folgenden beschreiben wir ein Beispiel für eine Situation, die man als<br />
Deadlock bezeichnet. Nehmen wir an, die Workprozesse 1 <strong>und</strong> 2 wollen<br />
jeweils eine Liste <strong>von</strong> Materialien sperren. Workprozess 1 sperrt Material<br />
A <strong>und</strong> Workprozess 2 Material B. Anschließend fordert Workprozess 1 eine<br />
Sperre auf Material B an, Workprozess 2 eine Sperre auf Material A. Beide<br />
Workprozesse können die angeforderten Sperren nicht bekommen, da<br />
diese vom jeweils anderen gehalten werden. Es entsteht also eine Situation,<br />
in der sich beide Prozesse gegenseitig blockieren. Solche Deadlocks<br />
werden <strong>von</strong> der <strong>Datenbank</strong>instanz automatisch erkannt <strong>und</strong> aufgelöst,<br />
indem einem der beiden Workprozesse eine Fehlermeldung zurückgegeben<br />
wird. Diese führt dann zum Abbruch des <strong>ABAP</strong>-Programms <strong>und</strong> wird<br />
im SAP-Syslog protokolliert.<br />
Deadlocks können durch geschickte Programmierung leicht vermieden<br />
werden. Wird in unserem Beispiel das Programm so geändert, dass die Materialliste<br />
vor dem Sperren sortiert wird, wird immer zuerst Material A gesperrt<br />
<strong>und</strong> erst, wenn dies erfolgreich war, Material B. Damit ist ein Deadlock<br />
ausgeschlossen.<br />
Deadlock-Situationen sollten die absolute Ausnahme sein. Treten diese<br />
vermehrt auf, deutet dies auf einen Fehler im Programm oder in der Konfiguration<br />
der <strong>Datenbank</strong>instanz hin.<br />
Von einigen <strong>Datenbank</strong>systemen (z. B. DB2 <strong>und</strong> SAP MaxDB) werden<br />
in gewissen seltenen Fällen Einzelsatzsperren automatisch zu Tabellensperren<br />
zusammengefasst, wenn die Anzahl der gesperrten Zeilen<br />
einer Tabelle eine gewisse Quote im Verhältnis zur Gesamtzahl <strong>von</strong><br />
Zeilen in der Tabelle (z. B. 10 %) überschreitet. In diesem Fall entscheiden<br />
diese <strong>Datenbank</strong>ensysteme, dass es günstiger ist, die<br />
Tabellensperren<br />
411
9<br />
Sperren<br />
gesamte Tabelle für einen Workprozess zu sperren, anstatt viele Sperren<br />
auf einzelne Zeilen zu verwalten. Praktische Konsequenzen hat<br />
dieses Verhalten z. B. für die Parallelisierung <strong>von</strong> Programmen, die<br />
eine gesamte Tabelle ändern sollen. Es ist nicht möglich, Hintergr<strong>und</strong>jobs<br />
so einzuplanen, dass z. B. der eine die erste Hälfte der<br />
Tabelle aktualisiert <strong>und</strong> der zweite gleichzeitig die andere Hälfte, da<br />
die <strong>Datenbank</strong> nach kurzer Zeit die Tabelle exklusiv für einen der<br />
Jobs sperren wird. Betroffen <strong>von</strong> dieser Einschränkung ist z. B. der<br />
Periodenverschieber in der Materialwirtschaft.<br />
Tabellensperren<br />
Durch <strong>Datenbank</strong>parameter können Sie beeinflussen, wann Einzelsatzsperren<br />
automatisch zu Tabellensperren zusammengefasst werden.<br />
Ganze Tabellen werden auch aus administrativen Gründen gesperrt, z. B.<br />
beim Anlegen <strong>von</strong> Indizes <strong>und</strong> bei bestimmten Tabellen- oder Indexanalysen<br />
der <strong>Datenbank</strong> (z. B. VALIDATE STRUCTURE bei Oracle). Werden diese<br />
Operationen im produktiven Betrieb durchgeführt, können daraus massive<br />
Performanceprobleme resultieren.<br />
9.2.2 SAP-Enqueues<br />
Die SAP-Enqueues werden in der Enqueue-Tabelle verwaltet, die sich<br />
im globalen Hauptspeicher des Enqueue-Servers befindet. Die Workprozesse<br />
des Enqueue-Servers greifen direkt auf die Enqueue-Tabelle<br />
zu, Workprozesse anderer <strong>Applikationsserver</strong> lassen ihre Sperroperationen<br />
vom Enqueue-Workprozess durchführen, wobei sie über den<br />
Message-Service miteinander kommunizieren (1, 2 in Abbildung<br />
9.2). In Abbildung 9.2 werden folgende Abkürzungen verwendet:<br />
DIA: Dialog-Workprozess; ENQ: Enqueue-Workprozess; ENQ-Tab:<br />
Enqueue-Tabelle.<br />
Instanz A (Enqueue-Server)<br />
Instanz B<br />
Message-Server<br />
Dispatcher<br />
Dispatcher<br />
DIA<br />
DIA<br />
DIA<br />
ENQ<br />
DIA<br />
DIA<br />
DIA<br />
ENQ-Tab<br />
Abbildung 9.2 Kommunikation beim Setzen <strong>und</strong> Freigeben <strong>von</strong> SAP-Enqueues<br />
412
Überwachung <strong>von</strong> Sperren 9.2<br />
Das Setzen <strong>und</strong> Freigeben <strong>von</strong> Sperren dauert bei Workprozessen des<br />
Enqueue-Servers weniger als eine Millisek<strong>und</strong>e, bei Workprozessen<br />
anderer <strong>Applikationsserver</strong> weniger als 100 Millisek<strong>und</strong>en.<br />
Wird ein SAP-Enqueue angefordert, der schon <strong>von</strong> einem anderen<br />
Benutzer gehalten wird, wird der Versuch, die Sperre zu setzen,<br />
zurückgewiesen <strong>und</strong> die Kontrolle mit einer entsprechenden Fehlermeldung<br />
an das <strong>ABAP</strong>-Programm zurückgegeben. Es steht nun dem<br />
Anwendungsentwickler frei, diese Fehlermeldung im Programm zu<br />
behandeln. Bei Programmen im Dialogbetrieb wird in der Regel die<br />
entsprechende Fehlermeldung an den Benutzer weitergereicht, z. B.<br />
mit der Nachricht »Material X gesperrt durch Benutzer Y«. In Hintergr<strong>und</strong>programmen<br />
wird dann zu einem späteren Zeitpunkt erneut<br />
versucht, die Sperre zu setzen. Nach einer gewissen Anzahl erfolgloser<br />
Versuche wird eine entsprechende Fehlermeldung in das Protokoll<br />
des Programms geschrieben.<br />
Performanceprobleme<br />
mit<br />
SAP-Enqueues<br />
Performanceprobleme aufgr<strong>und</strong> <strong>von</strong> (zu) lang gehaltenen SAP-<br />
Enqueues ergeben sich aus der Tatsache, dass der Benutzer nach<br />
einem erfolglosen Versuch seine Eingabe wiederholen wird. Nehmen<br />
wir z. B. an, dass er eine Materialliste bearbeiten <strong>und</strong> dazu 100 SAP-<br />
Enqueues setzen müsse. Schlägt der Versuch beim 99. Enqueue fehl<br />
<strong>und</strong> bricht das Programm mit der Meldung »Material Nummer 99 ist<br />
gesperrt« ab, war die gesamte zuvor vom System geleistete Arbeit<br />
vergebens <strong>und</strong> muss wiederholt werden. Fehlgeschlagene Anforderungen<br />
<strong>von</strong> Enqueues führen also zu erhöhter Last auf dem System<br />
<strong>und</strong> begrenzen den Durchsatz <strong>von</strong> Transaktionen.<br />
Eine Übersicht über alle zurzeit aktiven SAP-Enqueues gibt Ihnen<br />
Transaktion SM12 über den Pfad:<br />
Werkzeuge Administration Monitor Sperreinträge<br />
Zur Fehlerdiagnose starten Sie die folgenden Testprogramme:<br />
Zusätze Diagnose bzw. Zusätze Diagnose in VB<br />
Werden Fehler gemeldet, suchen Sie im SAP Service Marketplace der<br />
SAP nach Hinweisen oder wenden sich direkt an SAP.<br />
Über die Menüoption Zusätze Statistik gelangen Sie in eine Statistik<br />
zur Aktivität des Enqueue-Services. Die ersten drei Werte zeigen<br />
die Anzahl der Enqueue-Anforderungen, die Anzahl der erfolglosen<br />
Anforderungen (erfolglos, weil der angeforderte Enqueue bereits<br />
Enqueue-Statistik<br />
413
9<br />
Sperren<br />
anderweitig gehalten wurde) <strong>und</strong> die Anzahl der Fehler bei Enqueue-<br />
Anforderungen. Dabei sollte der Anteil der erfolglosen Anforderungen<br />
nicht mehr als 1 % der gesamten Anforderungen ausmachen.<br />
Fehler sollten überhaupt nicht auftreten.<br />
9.3 Nummernkreispufferung<br />
Bei vielen Datenstrukturen ist es erforderlich, auf die einzelnen<br />
<strong>Datenbank</strong>sätze gezielt zugreifen zu können. Dies wird mit eindeutigen<br />
Schlüsseln realisiert. Nummernkreise dienen dazu, einzelnen<br />
Datensätzen zu einem betriebswirtschaftlichen Objekt Nummern zur<br />
Vervollständigung des Schlüssels zuzuweisen. Solche Nummern sind<br />
z. B. Auftragsnummern oder Materialstammnummern. Mit der SAP-<br />
Nummernkreisverwaltung wird der Nummernstand überwacht,<br />
sodass bereits vergebene Nummern nicht erneut verteilt werden.<br />
9.3.1 Gr<strong>und</strong>lagen<br />
Ein betriebswirtschaftliches Objekt, für das über die Nummernkreise<br />
Teilschlüssel gebildet werden sollen, wird als Nummernkreisobjekt im<br />
SAP-System definiert. Ein Nummernkreis enthält ein Nummernkreisintervall<br />
mit definiertem Zeichenvorrat. Das Nummernkreisintervall<br />
besteht aus Zahlen oder alphanumerischen Zeichen <strong>und</strong><br />
wird begrenzt durch die Felder Von-Nummer <strong>und</strong> Bis-Nummer. Einem<br />
Nummernkreis werden ein oder mehrere Intervalle zugeordnet.<br />
Technische<br />
Realisierung<br />
Der aktuelle Nummernkreisstand eines Nummernkreises, d. h. die<br />
Nummer, die als nächste vergeben wird, wird in der <strong>Datenbank</strong>tabelle<br />
NRIV verwaltet. Benötigt ein Programm eine Nummer (z. B.<br />
aus dem Nummernkreis MATBELEG), führt es die folgenden Schritte<br />
durch:<br />
1. Das Programm liest den aktuellen Nummernkreisstand <strong>von</strong> der<br />
Tabelle NRIV <strong>und</strong> sperrt gleichzeitig den Nummernkreis MATBELEG.<br />
Dazu setzt es eine <strong>Datenbank</strong>sperre mit der SQL-Anweisung<br />
SELECT FOR UPDATE auf die Zeile der Tabelle NRIV, die den Nummernkreis<br />
MATBELEG verwaltet.<br />
414