Grundlagen der Datenbanken
Transaktion T1 setzte eine exklusive Sperre auf Zeile A und forderte dann eine Sperre auf Zeile B an, während T2 eine exklusive Sperre auf Zeile B setzte und dann eine Sperre auf Zeile A anforderte, sodass keine von beiden weiterkommt. Was tut ein DBMS üblicherweise, wenn es diese Situation erkennt?
- AEs lässt beide weiter warten; eine der Sperren wird irgendwann von selbst freigegeben
- BEs führt für eine Transaktion ein Rollback aus, um deren Sperren freizugeben, und lässt die andere weiterlaufen
- CEs schreibt die Änderungen von T1 und T2 beide unverändert fest
Antwort und Erläuterung anzeigen
Antwort: B. Es führt für eine Transaktion ein Rollback aus, um deren Sperren freizugeben, und lässt die andere weiterlaufen
Ein Zustand, in dem zwei oder mehr Transaktionen gegenseitig auf die Freigabe von Sperren warten, sodass keine weiterkommt, heißt Deadlock (Verklemmung). Durch bloßes Warten löst er sich nie auf; viele DBMS erkennen einen Deadlock daher, etwa wenn im Wartegraphen, der zeigt, welche Transaktion auf welche wartet, ein Zyklus entsteht, und führen für eine der Transaktionen (das Opfer) ein Rollback aus, um deren Sperren freizugeben. Die zurückgesetzte Transaktion wird später erneut ausgeführt. Ein anderer Ansatz ist eine Obergrenze (Timeout) für das Warten auf Sperren, bei deren Überschreitung die Transaktion zurückgesetzt wird. Als Vorbeugung ist es wirksam, alle Transaktionen Sperren in einer festen Reihenfolge setzen zu lassen, etwa Zeile A vor Zeile B.