Kapitel 11: Mehrbenutzersynchronisation und Serialisierbarkeit Flashcards
Arten von Mehrbenutzersynchronisation?
- Im Einzelbetrieb
- laufen sequenziell
- Im verzahnten Mehrbenutzerbetrieb
- Laufen parallel
- Bei warten auf Nutzer von TA1 läuft beispieslweise zwischenzeitlich TA2 an
Beispiel für Fehler bei unkontrolliertem Mehrbenutzerbetrieb?
Lost update: write(A,a2) geht verloren, da überschrieben

Fehler zwei bei Mehrbenutzerbetrieb
Dirty read: liest Wert, der später zurückgesetzt wird

Fehler drei bei Mehrbenutzerbetrieb?
Phantomproblem: T1: SElect, T2: dann daten hinzugefügt, T1dann erst mit select arbeiten

Was ist Serialisierbarkeit?
- Historie ist aquivalent zu einer seriellen Historie
- Dennoch parallele (verzahnte) Ausführung möglich
Es wird immer gewartet, bis verwendeter Wert festgeschrieben wurde. Wird er zeitlich verwendet, kann gegebenenfalls ein Konflikt auftreten (siehe Beispiele). Serialisierungsgraphen zeichnen, wer kommt nach wem? Muss azyklisch sein
Beispielaufgabe Aquivalenz verschiedener Historien I
lösen:

Beispielaufgabe Äquivalenz einer Historie II
Lösen:

Wann ist ein Serialisierungsgraph serialisierbar
WEnn er azyklisch ist (aufzeichnen)
Erkläre Rücksetzbarkeit (RC)
- Eine Transaktion darf erst dann ihr commit durchführen, wenn alle Transaktionen, von denen sie gelesen hat, beendet sind.
TA kann zurückgesetzt werden, ohne dadurch Änderungen einer anderen TA plötzlich inkonsistent werden zu lassen.
Erkläre kasskadierendes Rücksetziten (ACA)
TA kann zurückgesetzt werden, ohne dadurch Änderungen einer anderne TA inkonsistenz werden zu lassen.

Erkläre strikte Historien (ST)
Historien in dieser Klasse haben die Eigenschaft, dass Transaktionen zurückgesetzt werden können, ohne dadurch das Zurücksetzen einer anderen TA notwendig zu machen.
Wie sehen die verschiedenen Arten in Beziehung aus?

Was ist der DB Scheduler?

Nennen Sie die Modi der sperrbasierten Synchronisation
- S (shared, read lock) - Lesesperre
- X (exclusive, write lock) - Schreibsperre
Verträglichkeit:
S Sperre: geht bei NL und S
X Sperre: geht bei NL
Definition: Zwei-Phasen Sperrprotokoll (2PA)
- Jedes Objekt, das von TA genutzt wird muss gesperrt werden.
- TA fordert Sperre, die sie schon besitzt nicht erneut an
- Verträglichkeitstabelle muss eingehalten werden
- Zwei Phasen
- Wachstumsphase: Sperre wird angefordert, aber keine freigegeben
- Bisher erworbene Sperre wird freigegeben, keine weitere darf angefordert werden
- EOT muss TA alle Sperren zurückgeben
Beispiel für Zwei-Phasen Sperrprotokoll

Unterschied zwischen 2PL und strengem 2PL
- 2PL schließt kasskadierendes Rücksetzen nicht aus
- strenges 2PL:
- alle Sperren werden bis EOT gehalten
- kaskadierendes Rücksetzten ist somit ausgeschlossen
Wie können in 2PL Deadlocks auftreten?

Wie können Deadlocks erkannt werden?
- Wartegraph erstellen um zyklen zu finden
Wie ist die Beziehung zwischen Wartegraph und Serialisierungsgraph?
Wartegraph ist teilmenge des seralisierungsgraphen.
Kann sein, dass man nie warten muss aber trotzdem kanten im seralisierungsgraph hat. Anders herum hat man eine kante im wartegraph, hat man diese auch garantiert im SG
Wie können Deadlocks vermieden werden? und wie sehen die Verfahren aus?
- Preclaiming:
- Beginn der Transaktion alle benötigten Sperren auf einmal setzen
- ist eine Illusion. geh nicht, da man nicht weiß worauf der user zugreifen wird.
- Zeitstempel:
- eindeutige Zeitstempel (TS) für jede TA
- ältere TA keleinere TS als jüngere TA
- wound-to-wait:
- T1 will Sperre erwerben, die von T2 gehalten wird.
- Wenn T1 älter als T2 ist, wird T2 abgebrochen und zurückgesetzt, so dass T1 weiterlaufen kann
- Sonst wartet T1 auf die Freigabe der Sperre durch T2
- wait-die-strategie:
- T1 will Sperre erwerben, die von T2 gehalten wird.
- Wenn T1 älter als T2 ist, wartet T1 auf die Freigabe der Sperre
- Sonst wird T1 abgebrochen und zurückgesetzt.
Welche Eigenschaften (SR,RC,ACA,ST) haben Historien, welche vom 2PL und vom strengen 2PL zugelassen werden?
2PL garantiert Historien aus SR. Das strenge 2PL garantiert Historien aus SR ∩ ST.
Wa ̈re es beim strengen 2PL-Protokoll ausreichend, alle Schreibsperren bis zum EOT (Transaktionsende) zu halten, aber Lesesperren schon fru ̈her wieder freizugeben?
Es ist ausreichend, beim strengen 2PL-Protokoll nur die Schreibsperren bis zum Ende der Transaktion zu halten. Lesesperren ko ̈nnen analog zum normalen 2PL- Protokoll in der Schrumpfungsphase (nach wie vor jedoch nicht in der Wachstums- phase) peu `a peu freigegeben werden. Die generierten Schedules bleiben serialisier- bar und strikt
Beim strikten 2PL commit werden die folgende Schritte in angegebener Rei- henfolge ausgeführt:
- Eintragen des commit in den Logbuffer
- Persistieren des Logbuffer
- Freigabe aller Sperren
- Rückmeldung an den Benutzer
Manche Datenbanksysteme führen Schritt 3 als ersten Schritt aus. Was kann dies für Vorteile bringen? Sind trotzdem noch alle Garantien vom strikten 2PL gewährleistet, wenn ja unter welchen Bedingungen?
In der ursprünglichen Abfolge muss gewartet werden, bis das Log auf die Festplatte geschrieben ist. Dies kann mehrere Millisekunden dauern. Gerade fürr sehr schnelle Transaktionen kann dies ein vielfaches der eigentlich Verarbeitungsdauer sein. In der vorgeschlagenen Abfolge entfällt das Warten auf die Festplatte und die Sperren können viel früher freigegeben werden. Dadurch wird der Durchsatz des Systems erhöht.
Um die Eigenschaften von strikten 2PL zu erhalten, dürfen nur serialisierbare und strikte Historien möglich sein. Da für Serialisierbarkeit von Transaktionen nur die Schreib- und Leseoperationen betrachtet werden und die Änderung erst im commit-Schritt ist, ändert sich in dieser Hinsicht nichts.
Für Striktheit ist es wichtig, dass keine andere Transaktion die veränderten Daten der aktuellen Transaktion an den Benutzer zurückliefert, solange nicht garantiert ist, dass diese nicht mehr zurückgesetzt wird. Zum Zeitpunkt des commit ist die einzig mögliche Ursache für ein Abbruch, dass das Log nicht persistiert werden kann.
Falls mehrere Transaktionen gleichzeitig committen dürfen, kann ein Fehlerzustand gezeigt werden. Dazu T2 schließt alle Schritte des commit ab und das System crasht, bevor T1 das commit in den Logbuffer einträgt. Somit würde beim Wiederanlauf T1 zur Losertransaktion und ihre Änderungen zurückgenommen. Damit hätte T2 Daten gelesen, die nicht mehr in der Datenbank stehen.
Behebung:
- Immer nur eine Transaktion darf gleichzeitig im commit sein.
- Die Freigabe der Sperren wird erst nach Eintragen des commit in den Logbuf- fer durchgeführt.



