Was ist Mehrnutzerbetrieb?
gleichzeitige (nebenläufige) ausführung von Programmen
Wieso ist MNB gerade in DB wichtig?
Oft lange wartezeiten (zugriffslücke) die ohne MNB ungenutzt blieben -> langsam
Wie ist Isolation im Sinne von ACID auf DB implementiert?
Transaktionen denken sie seien die einzige transaktion
Was für fehler können im Mehrnutzerbetrieb auftreten?
- verlorengegangene änderungen (lost updates)
-abhängigkeit von nicht freigegebenen änderungen
-phantomproblem
Was sind verlorengegangene änderungen?
Zwei laden nacheinander, einer ändert und der andere ändert bevor der erste schreibt -> nur änderung von 2 berücksichtigt
was sind abhängigkeiten von nocht freigegebenen änderungen?
dirty read
einlesen eines veränderten datenstandes
falls transaktion die den geändert hat aborted -> falsch geänderter werd bereits gereadet und berücksichtigt!
was ist das phantomproblem?
wenn wärend der verarbeitung von t1 eine andere t2 etwas generiert das t1 eigentlich hätte berücksichtigen müssen
Was bedeutet serialisierbarkeit?
vereinigung von seriellem ausführen (felherlos) und vparaleller ausführung
-> kontrollierte nebenläufigkeit so dass das gleiche ergebnis generiert wird wie als wäre seriell gearbeitet worden
Wie sind transaktionen definiert?
elementare operationen:
read
write
abort
commit
welche ordnungsbedingungen müssen serialisierbare transaktionen einhalten?
alle operationen von ti müssen vor abort von ti ausgeführt sein
ti < ai
gleiches für commit
ti < ci
reihenfolge von ri(a) und wi(a) muss festgelegt sein (gleiche transaktion und gleiches element)
Was sind historien?
ablauf einer versahnten ausführung mehrerer transaktionen
was gibt es für konflikte in historien?
ri(A) und rj(A) egal -> nur lesen
ri(A) wj(A) -> konflikt da spezifiziert werden muss ob von altem oder neuen wert gelesen
wi(A) wj(A) -> konflikt
0> konfliktoperationen müssen immer die reihenfolge angeben!
wann sind zwei historien äquivalent?
gleiche reihenfolge der konfliktoperationen, rest egal
-> SG der beiden ist topologisch sortiert
wann sind historien serialisierbar?
wenn sie äquivalent zur nacheinander ausführung ist
nenne die kriterien der serialisierbarkeit
Was muss weiterhin in MBS beachtet werden?
zurücksetzbarkeit der serialiseirten transaktionen
-> zu jedem zeitpunkt vor commit zurücksetzbar!
Was sind rücksetzbare historien? RC
falls immer die schreibende transaktion vor der lesenden ihr commit durchführt
ci < cj
wenn Ti von Tj liest
wie ordnet man zwei transaktionen als lesend ein?
wj(A) < ri(A) -> j schreibt und i liest geschriebenes
j nicht vor lesen zurückgesetzt (ri(A) < aj)
alle von anderen transaktionen verursachte änderungen zwischen rj wi müssen rückgängig gemacht werden
-> ugs.: i liest genau das datum das j geschrieben hat (unverändert!)
was ist kaskadierendes zurücksetzen?
wenn mehrfach kaskadenartig auf gleiches datum geschrieben/gelesen und noch niemand commited -> bei abort von erster müssen alle nachfolgenden auch aborted werden
wenn vermeidet eine historie kaskadierendes zurücksetzen ACA?
cj < ri(A)
-> änderung wird erst nach commit für andere transaktionen freigegeben
was sind strikte historien? SR
veränderte daten einer laufenden transaktion dürfen nicht überschrieben werden
gilt wenn -->
erst commit oder abort bevor etwas auf bearbeitetem datum gemacht wird (von anderem)
-> verstärkung des kaskadieren, da dort nur commit vor lesen aber nicht schreiben!
Was ist der datenbank scheduler?
aufgabe: bringt einzeloperationen der transaktionen in reihenfolge sodass sie vernünftig ist (mindestanforderung: serialisierbarkeit und i.A noch ohne kaskadierendes zurücksetzen)
was ist die bekannteste implementierung eines schedulers?
sperrbasiert
was ist das grundlegende konzept von sperrbasierten schedulern?
sperren der daten sodass serialisierbarkeit gewähleistet wird
was gibt es für sperrmodi in sperrbas. schedulern?
read: S-Sperre (erlaubt kein schreiben aber weitere S-Locks)
write: X-Lock (erlaubt keine weitere sperre -> ermöglicht auch kein lesen)
wie funktioniert das 2PL (2 phase locking)
1. jedes objekt muss vor benutzung gesperrt werden (egal ob read oder write)
2. schon besessene sperren werden nicht erneut angefordert (von einzelner transaktion)
3. transaktion muss sperren von anderen transaktionen beachten (kein S falls bereits X ...)
4. jede transaktion hat 2 phasen
4.1 wachstumsphase -> anfordern aber kein freigeben von locks
4.2 schrumpfungsphase -> sperren dürfen freigegeben werden aber keine neuen angefordert
5. bei EOT müssen alle sperren zurückgegeben werden
=> s sperre kann angefordert werden aber transaktion muss dann warten falls X
Was wird von 2PL garantiert und was nicht?
garantierte serialisierbarkeit
garantiert keine vermeidung von kaskadierendem zurücksetzen -> gravierender mangel
-> striktes 2PL in dem keine schrumpfungsphase sondern alle locks bei EOT zurückgegeben werden verhindert dies
Was sind deadlocks in MBS?
zirkuläre abhängigkeiten von ressourcen
wie erkennt man deadlocks?
- time out -> nach gewisser zeit untätig/wartend -> abort (nachteil: kann auch nur auf CPU/speicher warten...)
- wartegraphen -> teurer aber genauer
erstellung von warteabhäöngigkeiten => falls kreis -> deadlock!
wie werden deadlocks im wartegraph aufgehoben?
zurücksetzen einer der am zyklus beteiligten transaktionen
-> am besten jüngere oder an mehreren zyklen beteiligte
kriterien :
minimierung rücksetzungsaufwand : jüngste
maximierung freigegebene ressourcen : neuer DL am unwahrscheinlichsten
vermeidung von starvation : freifahrschein falls bereits öfters abgebrochen -> nächstesmal andere wählen
was ist preclaiming?
transaktion erst beginnen wenn alle locks aquiriert wurden -> im echten leben nicht praktikabel
wie fuinktioniert verklemmungsvermeidung durch zeitstempel?
TA bekommen monoton wachsend zeitstempel
-> TA warten abhängig von zeitstempel:
wird angewandt in dem moment T1 sperre andfordert die auf T2 warten müsste
wound wait: T1 älter als T2 : T2 abbrechen und zurücksetzen sonst warten
wait-die: T1 älter als T2 : warten auf sperre sonst abbrechen von T1 und zurücksetzen
Was sind hierarchische sperrgranulate?
Da häufig nicht ganze seiten gesperrt werden -> kleinere granulate bis hin zu tupeln
um nicht überall nach locks zu suchen : angabe des locks auch in höheren granulaten mit IX oder IS
(IS lässt s und IX IS zu IX nur IS und IX!)
wie wird mit einfügen und löschen verfahren ?
in beiden fällen x lock anfordern (und nach strenger 2PL verfahren)
was ist zeitstempelbasierte synchronisation?
zu beginn bekommt TA zeitstempel
jedes Datum A hat auch zeitstempel readTS(A) -> TS der jüngsten TA die gelesen hat
writeTS(A) -> TS der jüngsten TA die darauf geschrieben hat
-> ermöglicht serieller zeitablauf
1. read ri(A)
->TS(Ti) < writeTS(A) -> zu alt, neu starten
-> TS(Ti) > writeTS(A) -> klappt
2.write:
TS(Ti) < readTS(A)-> gerade jemand am schreiben, Ti zurücksetzen
TS(Ti) < writeTS(A) -> will wert jüngerer operation überschreiben -> zurücksetzen
sonst ok!
Last changed2 years ago