Nenne die Operationen einer TA: Ti
BOT_i -> Begin of Transaction
r_i(A) -> read A
w_i(A) -> write A
a_i -> abbort TA
c_i -> commit TA
Wann stehen zwei TAs in Konflikt?
-> Beide auf selbem Objekt, eine davon write()
—> wenn in Konflik: dürfen nicht parallel ausgeführt werden
Wie kann man Historien klassifizieren?
SR: serialisierbar
RC: rücksetzbar
ACA: vermeidet kaskadierendes Rücksetzen
ST: strikt
ST&SR: seriell
Wie konstuiert man einen Serialisierbarkeitsgraph (SG)?
Jede committete Transaktion ist ein Knoten im Graph
Jede Konfliktoperationen Kij ist eine Kante im Graph ➡ Zeichne einen Pfeil von Ti nach Tj, wenn σi < σj
Wann ist eine Historie serialisierbar?
SR —> wenn SG azyklisch —> Historie serialisierbar
Wann ist eine Historie rücksetzbar?
RC (ReCoverable):
Write() muss vor Read() commiten
Steps:
commit Reihenfolge aufschreiben
Konfilke mit w < r prüfen
Gewünschte commit Reihenfolge mit echter abgleichen
wenn gleich -> Rücksetzbar
Wann ist eine Historie ACA?a
ACA (Avoiding Cascading Aborts):
w(X) < c(X) < r(X)
Konfilkte mit w < r
w_i < c_i < r_j
Wann ist eine Historie strikt?
ST (STrict):
w(X) < c(X) or a(X) < r(X) or w(X)
Was macht ein Scheduler? Welche Möglichkeiten gibt es?
Ordnet eingehende Operationen um serielle & rücksetzbare Historien zu garantieren
Möglichkeiten für Eingangsoperationen:
sofortige Ausführung
zurückweisen -> abbruch
verzögern
Welche Kategorien von Schedulern gibt es?
Optimistisch:
schnelles arbeiten
anschließend Probleme aufräumen
Pessimistisch: Möglichst geschickt
Beschreiben Sie optimistische Scheduler.
Snapshot Isolation
Jede Transaktion arbeitet in einer eigenen Version der DB
Commit -> Änderungen eingefügt => Überschneiden des Write-Sets wird abgebrochen
Beschreiben Sie Zeitstempelbasierte pessimistische Scheduler.
TA stoppen bei Problem
—> im Anschluss keine Probleme
Zeitstempelbasiert:
Jedes Datum: -> wann wurde zuletzt r()/w()
Jede TA -> wann start
—> TA trifft auf neuen Zeitstempel —> Abbruch
Beschreiben Sie Sperrbasierte Scheduler.
Jedes X hat eine Sperre
TA muss Zugriff auf X anfordern
wenn gesperrt: TA wartet
wenn offen: TA startet
TA Ende -> Sperre offen
2 Arten:
Shared Lock (Lesesperre)
Exclusive Lock (Schreibesperre)
Erkläre 2-Phase-Locking (2PL). Was ist der Unterschied zu strengem 2PL?
Benutzen? -> Obj. muss gesperrt sein
TA kann Sperre nur ein Mal anfordern
wenn schon zu -> in Warteschlange
TA Ende -> alle Sperren öffnen
Strenges:
Welche Isolierungslevel gibt es für parallele Operationen? Welche Fehler können dabei auftreten und für welche level treten sie nicht mehr auf?
—> Haken = verhindert Problem
Was ist ein Lost-Update-Error?
Was ist ein Dirty-Read?
Was ist ein Non-Repeatable-Read?
Was ist ein Phantom-Problem?
Welches Problem gibt es bei Sperrbasierten Synchronisierungsmethoden?
Verklemmungen —> Deadlocks
-> entstehen durch Zyklen im Wartegraph von TAs
Was kann bei Snapshot-Isolation passieren? Warum kann es nicht bei optimistischer Synchronisierung passieren?
-> können beide w() auch wenn Bedingung für TA eig. nur für 1 gleichzeitig zutrifft
geht nicht bei optimistischer
Was kann man tun, um Deadlocks zu vermeiden?
Timeouts
Wartgraphen auf Zyklen prüfen —> ideal, aber teuer
Preclaiming
TA fragt alle Sperren an —> kaum Parallelität
Zeitstempel
TA Abbruch je nach TS -> viele FPs und Live Lock möglich
Last changed3 months ago