Wo. 11, Aufg. 2, Szenario 2: Vertausche Beschreibungen von T1 und T2
Compare changes
+ 2
− 2
2. Wenn serialisierbar, geben Sie einen konflikt-äquivalenten seriellen Schedule an. Der neue Begriff "konflikt-äquivalent" bedeutet, dass der Serialisierbarkeitsgraph derselbe bleibt. T1 bis T5 in serielle Reihenfolge bringen, aber nur so viel wie nötig ("Teilsortierung" der Transaktionen). Tipp: Vertauschen der konfliktfreien Operationen.
Der Zyklus lässt sich lösen, indem man zum Beispiel $T2$ und $T4$ rückgängig macht. Angenommen es gibt ein Rollback von $T2$ und $T4$, dann folgt auch ein Rollback aller Transaktionen $T_n$, die eine Konflikt-Operation $op_2 < op_n$ oder $op_4 < op_n$ haben. Aus der Liste der Konfliktoperationen folgt, dass in diesem Beispiel auch für $T1$ ein Rollback erfolgen muss und das heisst, es gibt Cascading Rollback.
Analog zum gegebenen Schedule lassen sich zum Beispiel folgende zwei Transaktionen in SQL formulieren. Der Deadlock tritt sogleich nach $w(x)$ auf, da dann $T1$ auf $T2$ und umgekehrt $T2$ auf $T1$ wartet. PostgreSQL detektiert den Deadlock und bricht $T2$ ab (Rollback). $T1$ kann danach normal committed werden.
Um den Deadlock zu lösen, müssen wir eine der im Zyklus vorkommenden Transaktionen zurücksetzen. Das heisst, wir haben mehrere Transaktionen zur Auswahl, um den Deadlock zu beheben. Grundsätzlich gilt: Je nachdem welche Transaktion gewählt wird, bewirkt dies andere Effekte bei der Rücksetzung (Minimierung des Rücksetzungsaufwands, Maximierung der freigegebenen Ressourcen, etc.). Da in diesem Beispiel aber alle Transaktionen gleich viele Ressourcen besetzen, ist es egal, welche Transaktion wir zurücksetzen. Wir wählen zum Beispiel $T3$.