2 Analyse von Hardware, Datenbank und ABAP-Applikationsserver
2 Analyse von Hardware, Datenbank und ABAP-Applikationsserver
2 Analyse von Hardware, Datenbank und ABAP-Applikationsserver
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Ü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