8.5 Deadlock-Behandlung
8.5.1 Deadlock-Verhütung
Die Deadlock-Verhütung (prevention) ist dadurch gekennzeichnet, daß die Entstehung von Deadlocks verhindert wird, ohne daß dazu irgendwelche Maßnahmen während der Abarbeitung der Transaktionen erforderlich sind. In diese Kategorie fallen v.a. die sogenannten Preclaiming-Sperrverfahren, bei denen eine Transaktion alle benötigten Sperren bereits bei BOT anfordern muß. Verklemmungen können dabei umgangen werden, indem jede Transaktion ihre Sperren in einer global festgelegten Reihenfolge anfordert, da dann keine zyklische Wartebeziehungen entstehen können. Die eigentliche Ausführung einer Transaktion kann erst nach Erwerb aller benötigten Sperren beginnen, wobei im Fall von Sperrkonflikten die entsprechenden Wartezeiten in Kauf zu nehmen sind.
Beispiel 8-12 (neu gegenüber Buchversion)
- Für den in Abb. 8-8 gezeigten Deadlock (Beispiel 8-11) benötigt Transaktion T1 eine Schreibsperre für die Konten K1 und K2; T2 für K2 und K1. Bei einer festen Reihenfolge für Sperranforderungen ergeben sich somit zum Beginn beider Transaktionen die gleichen Sperranforderungen, z.B. zunächst für K1 und dann für K2. Diejenige Transaktion, deren Sperranforderung für K1 zuerst bearbeitet wird, kann ohne Behinderung auch die K2-Sperre erwerben. Die zweite Transaktion läuft in einen Sperrkonflikt für K1 und kann erst nach Beendigung der ersten Transaktion mit der Sperrbearbeitung und der eigentlichen Ausführung fortfahren. Dafür wird ein Deadlock umgangen (keine Rücksetzung).
Ein wesentliches Problem der Deadlock-Verhütung ist, daß bei Beginn einer Transaktion i.a. nur Obermengen der zu referenzierenden Objekte (z.B. ganze Relationen) bekannt sind. Der somit verursachte Grad an Sperrkonflikten ist daher in der Regel inakzeptabel. Dies gilt umso mehr, da die Sperren während der gesamten Transaktionslaufzeit zu halten sind. Im verteilten Fall kommt als weiterer Nachteil hinzu, daß für nicht lokal verwaltete Objekte vor Transaktionsbeginn eigene Kommunikationsvorgänge für die Sperranforderungen erforderlich sind.
Wegen dieser Schwächen hat der Preclaiming-Ansatz keine praktische Relevanz für Datenbanksysteme. Wir gehen daher im weiteren bei Sperrverfahren davon aus, daß die Sperren während der Transaktionsverarbeitung (unmittelbar vor einem Objektzugriff) angefordert werden.