15.09.2014 Aufrufe

2 Analyse von Hardware, Datenbank und ABAP-Applikationsserver

2 Analyse von Hardware, Datenbank und ABAP-Applikationsserver

2 Analyse von Hardware, Datenbank und ABAP-Applikationsserver

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!