Was ist die Aufgabe der Revocerycomponente in DBMS?
widerherstellung des jüngsten konsistenten Datenbasiszustand
Welche Fehlerkategorien unterscheiden wir?
lokale fehler einer noch nicht festgeschriebenen Transaktion
fehler mit hauptspeicherverlust
fehler mit hintergrundspeicherverlust
Wozu führen lokale fehler und was sind potentielle ursachen?
scheitern der Transaktion
aber keine beeinflussung des restlichen systems hinsichtlich der Datenbankkonsistenz
(typische) Fehlerquellen:
fehler im anwendungsprogramm
expliziter abbruch (abort) der TA durch benutzer (e.g. gewünschtes ergebnis kam nicht zu stande…)
systemgesteuerter abbruch der TA (e.g. behebung eines deadlocks)
Wie werden lokale fehler behoben?
rückgängig machen aller änderungen an datenbasis
die durch die jeweilige TA verursacht wurder
-> lokales undo
In welchem zeitrahmen sollten lokale fehler behoben werden?
milisekunden
da (relativ) häufig…
sogar ohne sperren des systems für andere Transaktionen
Wie ist die zweistufige speicherhierarchie in datenbanken?
DMBS-puffer (teil des Hauptspeichers)
Hintergrundspeicher (materialisierte datenbasis)
puffer hält daten (tupel) die auf seiten (e.g. P_A) im hintergrundspeicher abgebildet sind
seite kann mehr als ein datum halten
Vor zugriff auf datum -> muss in puffer eingelagert werden
darauf wird e.g. was geändert
muss dann wieder ausgelagert (zurückgeschrieben) werden
kann e.g.. unterschieden werden mit C’ im Puffer und C im Hintergrundspeicher…)
Was ist zum beispiel eine ursache für fehler mit hauptspeicherverlust?
stromausfall
-> hauptspeicher geht verloren
=> puffer geht verloren
=> änderungen im Puffer verloren die aber noch nicht in den Hintergrundspeicher ausgelagert wurden…
Was muss gewährleistet werden bei einem Fehler mit Hauptspeicherverlust?
alle durch nicht abgeschlossene TA eingebrachte Änderungen im Hintergrundspeicher müssen rückgängig gemacht werden
(globales) undo
alle noch nicht eingebrachte änderungen abgeschlossener TA müssen nachvollzogen werden
(globales) redo
Was ist nötig um fehler mit hauptspeicherverlust zu beheben?
zusazinformationen
i.e. log datei
In welchen intervallen treten üblicherweise fehler mit hauptspeicherverlust auf? Was sind ursachen? Wie schnell sollten sie behoben werden?
intervall von tagen
fehler im Betriebssystemcode
hardwareausfall
revocery dauer im bereich von einigen minuten
Was kann Fehler mit Hintergrundspeicherverlust verursachen?
head crash
feuer/erdbeben -> zerstört die platten
fehler in systemprogrammen (e.g. plattentreiber) die zu einem datenverlust führen
Wie oft treten fehler mit Hauptspeicherverlust üblicherweise auf?
monate oder jahre
Womit werden Fehler mit hinergrundspeicherverlust behoben?
archivkopien
-> !! sollten röumlich getrennt aufbewahrt werden!!
Was passiert mit eingelagerten seiten (im puffer) auf die im rahmen einer TA zugegriffen wird?
fixieren im puffer
-> setzen eines FIX vermerks
Was wird durch das fixieren einer Seite im puffer (setzen des FIX vermerks) erreicht?
verhindert verdrängen der seite aus dem puffer
Wie werden (fixierte) seiten die geändert wurden gekennzeichnet?
kennzeichnen mit dirty
=> sagt aus dass puffer seite nicht mehr mit hauptspeicher üereinstimmt
Wie lange wird eine seite fixiert?
für die dauer einer operation
-> danach wieder freigegeben
Welche ersetzungsstrategien existieren für noch nicht festgeschriebene änderungen ?
not steal
-> seiten die von einer noch aktiven transaktion modifiziert wurden werden prinzipiell nicht ausgelagert
steal
-> prinzipiell jede nicht fixierte seite kandidat für ersetzung falls neue seite eingelagert werden muss
Was ist der vorteil von not steal?
kann nicht passieren dass änderungen einer nicht abgeschlossenen TA in materialisierte datenbasis übernommen werden
-> rollback muss sich nicht um hintergrundspeicher kümmern…
Welche strategien gibt es für die ersetzung von seiten im puffer (force steal)
force
-> nach commit werden alle von der TA modifizierte seiten in die mat. DB eingebracht
not force
-> erzwingt diese einbringung nicht
Was kann bei einem not force passieren?
änderungen nicht direkt eingebracht
-> Hauptspeicher verlust
-> brauchen redo…
=> benötigen log datei…
Was sind potentielle probleme wenn man not steal und force kombiniert?
erzwungene propagierung aller änderungen nach beendigung der TA teuer
hot spot seiten (seiten die längere zeit im puffer da von mehreren TA oft benötigt) -> werden nur kopiert aber nicht ersetzt…
atomares prinzip
-> aufwand sicher zu stellen dass alles oder nichts eingebracht wurde… (i.e. fehler…)
probleme wenn TA seiten sperren können (exklusive nutzung)
Welche anforderungen haben die verschiedenen kombinationen von force und steal im hinblick auf redo- und undo-recovery?
kein redo
kein undo
redo
undo
Was versteht man unter der einbringungsstrategie?
methodik, nach der änderungen in die materialisierte Datenbasis propagiert werden
Welche einbringungsstrategien unterscheiden wir?
direkt (update in place)
indirekt (e.g. twin block)
Wie funktioniert update-in-place? Was ist eine konsequenz?
jede seite in DBMS puffer ist genau einer seite im Hintergrundspeicher zugeordnet
-> überschreibt alte seite im Hintergrundspecher wenn ausgeschrieben wird
für redo -> benötigen zusätzliche protokollinformationen
Was ist die generelle idee von indirekten einbringugnsstrategien?
geänderte seiten werden an anderer stelle in den hintergrundspeicher eingebracht/gespeichert
zu bestimmten, vom system initiierten zeitpunkten werden die alten zustände (im hintergrundspeicher) durch die neuen (im hintergrundspeicher) ersetzt
Was ist eine einfache methods für indirekte einbringung?
twin block verfahren
jede puffer seite (PA) hat zwei seiten im Hintergrundspeicher (P_{A_aktuell}), (P_{A_nicht aktuell})
globales “aktuell” bit gibt an welcher der blöcke die aktuelle (eingebrachte änderungen) informationen hat
-> bei fehler kann man einfach undo in dem man die nicht aktuelle nimmt…
Was ist ein vorteil von twin-block?
atomare propagation des puffer inhaltes
-> kopieren aller modifizierten seiten aus puffer auf twin-blöcke
-> wenn erfolgt -> flippen der entsprechenden aktuell bits…
-> geht etwas schief (nicht alles eingebrahct) -> einfach altes nehmen… (nichts)
Was ist ein nachteil des twin-block verfahrent?
verdoppelter speicherbedarf
Was ist das schattenspeicherprinzip?
nur tatsächlich modifizierte seiten werden verdoppelt…
=> schafft etwas abhilfe im hinblick auf speicherbedarf von twin block
aber: nachteile in praxis desewgen fast nie eingesetzt
Welche systemkonfiguraiton nehmen wir im allgemeinen an?
update-in-place
kleine sperrgranulate
Was ist gemeint mit kleinen sperrgranulaten?
TA können kleinere objekte als ganze seite exklusiv sperren und verändern
-> P_A = {A, D}
-> TA1 modifiziert A -> sperrt nur A -> TA2 kann gleichzeitig D (auf gleicher seite!) modifizieren…
=> schwierigkeit: seite kann änderungen einer bereits abgeschlossenen und einer noch nicht abgeschlossenen TA enthalten
Wieso benötigen wir eine log-datei?
materialisierte datenbasis
enthält nicht dem aktuellsten konsistenten zustand
und ist i.A. nicht mal in einem konsistenten zustand
da:
-> änderugen nicht abgeschlossener TA eingebracht werden können
-> änderungen abgeschlossener TA noch nicht eingebracht worden sein könnten
Welche informationen sind in einer log file für jede durch eine operation einer TA verursachten änderung enthalten?
redo-informaiton
wie kann die änderung nachvollzogen werden?
undo-information
wie kann änderung rückgängig gemacht werden?
zusätzlich:
LSN (log sequence number)
Transaktionskennung (TA)
PageID
PrevLSN
Was ist der nutzen der LSN?
Last changeda year ago