Transaktions-Synchronisation (Datenabnken)

Transaktions-Synchronisation (Datenabnken)

Zwei Arten von locks:

  • shared (S)
  • exlcusive (X)

Shared locks können immer genommen werden, außer jemand hat ein exclusive lock auf der Sache.

Exclusive locks können nur dann genommen werden, wenn keiner irgendein lock hat.

Two Phase Locking (2PL) #

Zwei Phasen:

  • Wachstumsphase

  • Schrumpfphase

Alle Daten die gelesen oder geschrieben werden, werden in der Wachstumsphase gelockt von der Transaktion (wenn schon gelockt dann warten). Sie werden dann in der Schrumpfungsphase wieder freigegeben.

Strenges Two Phase Locking (S2PL) #

  • 2PL schließt cascading aborts nicht aus.

  • S2PL schließt casscading aborts aus.

  • Alle sperren werden bis zum Ende gehalten und gleichzeitig freigegeben.

Erkennung von Deadlocks #

Wartegraph #

Jede Transaktion is ein Konten; Kanten entstehen duch die “wartet auf”-Beziehung. Deadlocks sind vorhanden wenn der Wartegraph Kreise enthält.

Kann erkannt werden zb durch Tiefensuche im Graph.

Vermeidung von Deadlocks #

Preclaiming #

Alle locks werden gleich am Anfang genommen.

Transaktions-Zeitstempelbasiert #

Wound-Wait #

  • transaktions_synchronisation_datenabnken_c6c0d2567ed1614f9c1dd453ce4c1abb82ccca04.svg will das Lock nehmen, das von transaktions_synchronisation_datenabnken_f9246428c9d0ab9dfe6dec8b765c7b304e2c06b6.svg gehalten wird.
  • Wenn transaktions_synchronisation_datenabnken_c6c0d2567ed1614f9c1dd453ce4c1abb82ccca04.svg älter als transaktions_synchronisation_datenabnken_f9246428c9d0ab9dfe6dec8b765c7b304e2c06b6.svg ist, wird transaktions_synchronisation_datenabnken_f9246428c9d0ab9dfe6dec8b765c7b304e2c06b6.svg abortet. Der ältere killt den jüngeren
  • Wenn transaktions_synchronisation_datenabnken_f9246428c9d0ab9dfe6dec8b765c7b304e2c06b6.svg älter als transaktions_synchronisation_datenabnken_c6c0d2567ed1614f9c1dd453ce4c1abb82ccca04.svg ist, wartet transaktions_synchronisation_datenabnken_63f000ba4fa24299cb9006a42ee1a8204705fa28.svg bis transaktions_synchronisation_datenabnken_f9246428c9d0ab9dfe6dec8b765c7b304e2c06b6.svg fertig ist. Der jüngere wartet

Wait-Die #

  • transaktions_synchronisation_datenabnken_c6c0d2567ed1614f9c1dd453ce4c1abb82ccca04.svg will das Lock nehmen, das von transaktions_synchronisation_datenabnken_f9246428c9d0ab9dfe6dec8b765c7b304e2c06b6.svg gehalten wird.
  • Wenn transaktions_synchronisation_datenabnken_c6c0d2567ed1614f9c1dd453ce4c1abb82ccca04.svg älter als transaktions_synchronisation_datenabnken_f9246428c9d0ab9dfe6dec8b765c7b304e2c06b6.svg ist, wartet transaktions_synchronisation_datenabnken_c6c0d2567ed1614f9c1dd453ce4c1abb82ccca04.svg bis transaktions_synchronisation_datenabnken_f9246428c9d0ab9dfe6dec8b765c7b304e2c06b6.svg fertig ist. Der ältere wartet
  • Wenn transaktions_synchronisation_datenabnken_f9246428c9d0ab9dfe6dec8b765c7b304e2c06b6.svg älter als transaktions_synchronisation_datenabnken_c6c0d2567ed1614f9c1dd453ce4c1abb82ccca04.svg ist, wird transaktions_synchronisation_datenabnken_c6c0d2567ed1614f9c1dd453ce4c1abb82ccca04.svg abortet. Der ältere killt den jüngeren

Multi-Granularity Locking (MGL) #

“Hierarchisches locking”

  • Zusätzliche Sperrmodi (zu: no lock, shared, exclusive):
    • IS: intention share: Weiter unten ist ein shared lock beabsichtigt
    • IX: intention exclusive: weiter unten ist ein exclusive lock beabsichtigt
  • Deadlocks trotzdem möglich

Vermeidung des Phantomproblems #

Man sperrt nicht nur Tupel selbst, sondern zb auch den bereich im Index (B-Baum) der die Tupen enthält damit in der Zeit nicht eingefügt oder gelöscht werden kann.

Datum-Zeitstempelbasierte Synchronisation #

Jedes Datum hat einen readTS und writeTS Zeitstempel der jüngsten Transaktion der die Daten gelesen / geschrieben hat.

Optimistische Synchronisation #

  1. Lesephase :: Alle Schreiboperationen werden auf einer lokalen kopie ausgeführt
  2. Validierungsphase :: Es wird entschieden ob die Transaktion im konflikt mit anderen Transaktionen steht.
  3. Schreibphase :: Wenn die validierung positiv verlaufen ist, werden die Änderungen in die Datenbank eingebracht.

Validierung bei Optimistischer Synchonisation #

Die Validierung einer Transaktion transaktions_synchronisation_datenabnken_ac9c30301be78d55d392eeb81e6952ee03e6e56a.svg ist erfolgreich, falls für alle früher validierten Transaktionen transaktions_synchronisation_datenabnken_5d14db7e7d186e1f4c24417c46bf57db5decb203.svg eins der beiden gilt:

  1. transaktions_synchronisation_datenabnken_5d14db7e7d186e1f4c24417c46bf57db5decb203.svg war vor beginn von transaktions_synchronisation_datenabnken_ac9c30301be78d55d392eeb81e6952ee03e6e56a.svg schon abgeschlossen. transaktions_synchronisation_datenabnken_ac9c30301be78d55d392eeb81e6952ee03e6e56a.svg kann gar nicht in Konflikt mit transaktions_synchronisation_datenabnken_5d14db7e7d186e1f4c24417c46bf57db5decb203.svg gekommen sein.
  2. transaktions_synchronisation_datenabnken_3eab8d010ccf2ab3732b311293e14a7b5b916b29.svg. transaktions_synchronisation_datenabnken_5d14db7e7d186e1f4c24417c46bf57db5decb203.svg hat nichts geschrieben was transaktions_synchronisation_datenabnken_ac9c30301be78d55d392eeb81e6952ee03e6e56a.svg gelesen hat

Validierung bei Snapshot Isolation #

Gleich wie bei Validierung bei Optimistischer Synchonisation : Wenn transaktions_synchronisation_datenabnken_5d14db7e7d186e1f4c24417c46bf57db5decb203.svg vor transaktions_synchronisation_datenabnken_ac9c30301be78d55d392eeb81e6952ee03e6e56a.svg validiert wurde und schon beendet war bevor transaktions_synchronisation_datenabnken_ac9c30301be78d55d392eeb81e6952ee03e6e56a.svg bekonnen hat, kann transaktions_synchronisation_datenabnken_5d14db7e7d186e1f4c24417c46bf57db5decb203.svg nicht in Konflikt mit transaktions_synchronisation_datenabnken_ac9c30301be78d55d392eeb81e6952ee03e6e56a.svg gekommen sein.

Ansonsten muss gelten: transaktions_synchronisation_datenabnken_1601ebd7948e75c2eafac823e12acabb3d09269b.svg. transaktions_synchronisation_datenabnken_5d14db7e7d186e1f4c24417c46bf57db5decb203.svg hat nichts geschrieben was transaktions_synchronisation_datenabnken_ac9c30301be78d55d392eeb81e6952ee03e6e56a.svg überschrieben hat

Calendar July 22, 2022 (Updated October 22, 2023)