universität karlsruhe (th) © 2008 univ,karlsruhe, ipd, prof. lockemanndbi 7 kapitel 7...
TRANSCRIPT
UniversitätKarlsruhe (TH)
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
Kapitel 7
Zugriffsschicht: Zuverlässigkeit
2
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
Gegenstand des Kapitels
Mengenorientiertes Datenmodell
Datenmodell
Dateien
Dateiverwaltung
Geräteschnittstelle
Anfragebearbeitung
Satzorientiertes Datenmodell
Speicherstruktur
Schneller Transport zwischen Haupt- und Hintergrundspeicher
Hauptspeicherseiten u. Segmente
Segment- u. Pufferverwaltung Bevorratung von Daten im Hauptspeicher (rechtzeitige Bereitstellung vor Benutzung)
Transparenter homogener Speicher Datentypen:
Seite = feste Anzahl von BytesSegment = var. Anzahl von Seiten
Operatoren:Anforderung/Freigabe von SeitenSegmente anlegen/öffnen/schließen
Datentypen:Block = feste Anzahl von BytesDatei = variable Anzahl v. Blöcken
Operatoren: Dateien anlegen/öffnen/schließen Lesen/Schreiben von Blöcken
Geräte-E/A
Satz- u. Satzmengenverwaltung
Satzzugriffsstrukturen
Zugriffsschicht
Vorschau auf zukünftig benötigte Daten
Vermeiden nicht aktuell benötigter Daten
Datentypen:Sätze und Satzmengen
Operatoren:Operatoren auf Sätzen
Datentypen:Satzmengen
Operatoren:Operatoren auf Mengen
Datentypen:phys. Zugriffsstrukturen auf Sätze
Operatoren:seq. Durchlauf, gezielte Suche
Optimaler Einsatz der logischen Ressourcen
Performanz
3
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
1
Kompensation
Transaktionen
Recovery in der Segmentschicht
1(0)
j(1)
i(1)
2(1)
1(1)
p(0)
n+1(0)
n(0)
m(0)
k(0)
2(0)
op1(0) op
k-1(0)
op1(1) op
i-1(1)
01
01
01
01
Rekonstruktion
0-Konsistenz durch RAID usw. gesichert.
Standardlösung:
Bewahre Zustand n auf(0)
Von einer Transaktion bewirkter Endzustand
Seiten
4
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
Recovery in der Zugriffsschicht
Recovery könnte statt in der Segmentschicht auch in der Zugriffsschicht erfolgen. Sätze sind feinkörniger als Seiten.
Vorteil: meist sehr kurze Logeinträge Nachteil: mehr Operationen mehr Logging
1(0)
p(0)
n+1(0)
n(0)
k(0)
2(0)
op1(0) op
k-1(0)
01
01
1(1)
t(1)
r+1(1)
r(1)
q(1)
i(1)
2(1)
op1(1) op
i-1(1)
12
12
2(2)
1(2)
op1(2)
Seiten
Sätze
Transaktionen
01
01
Rekonstruktion
RekonstruktionKompensation
5
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
Recovery in der Zugriffsschicht: Vergleich
1(0)
p(0)
n+1(0)
n(0)
k(0)
2(0)
op(0) op(0)
01
01
1(1)
t(1)
r+1(1)
r(1)
q(1)
i(1)
2(1)
op1(1) op
i-1(1)
12
12
2(2)
1(2)
op1(2)
Seiten
Sätze
Transaktionen
01
01
Rekonstruktion
RekonstruktionKompensation
Seiten-Logging
Full-write: Logging der gesamten Seite unabhängig vom Ausmaß der Änderungen.
Satz-Logging
Record-write: Logging lediglich der lokalen Änderungen auf der Seite.
6
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
Record-write
Partial-write: Logging der physischen Wirkung des Record-write
Idempotenz!
write(a)write(b)flush
restart
redo(a)redo(b)
Physiological-write: Logisches Logging des Record-write: Operation und Parameter
Idempotenz nicht zwingend!
write(a)write(b)flush
restart
redo(a)redo(b)
a b
a
a b
b
a b
a b
a b
a b
a b
7
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
unpindo(flush)
Segment-Verwalter
Partial-write: Architektursicht
Transaktion 1 Transaktion 2 ... Transaktion n
Scheduler
Historie 1 Historie n
Sperren-Verwalter
Historie über Datensätzen
Historie über Seiten
Log-datei
Recovery- Backup-Verwalter
Globale Historie aus read, partial-write, allocate, unfix, commit, abort
Puffer- Verwalter
Daten-basis
p3 p2 p17 p24 p18 p57
p42 p8 p67 p19 p33 p81
p46 p25 p54 p66 p9 p91
p14 p68 p31 p29 p48 p47
p1 p5 p99 p23 p24 p56
p62 p15 p49 p36 p93 p7
Log-seiten
d4 d43 d17 d15 d2 d58
d5 d9 d26 d69 d6 d16
d46 d68 d55 d32 d97 d49
d25 d20 d67 d30 d49 d37
d19 d34 d10 d24 d25 d94
d63 d82 d49 d92 d57 d8
Daten-seiten
restart
fetch, flush
read, partial-write, allocate, unfix partial-write: Ersetzen einer
Bytesequenz auf 1 SeiteParameter: Transaktion,
Seitennummer, Ausschnitt
Satzverwaltung
Globale Historie aus read, record-write, allocate, unfix, commit, abort Historie über Datensätzen
Voraussetzung der Serialisierbarkeit erfüllt!
Wg. Idempotenz: Recovery-Lösungen können von der Segmentschicht übernommen werden!
8
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
1st crash 2nd crash
resumenormaloperation
restartcomplete
analysispass
redopass
undopass
analysispass
redopass
t1
t2
t3
t4
t5
flush(d) flush(d)
1st restart(incomplete)
2nd restart(complete)
w(a)
w(b)
w(c)
w(d)
w(d)
w(a)
w(d)
w(e)
w(b)
flush(b)
w(f)
Sample Scenario for Redo-Winners
9
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
Sample Scenario Data StructuresSequence number: action Change of cached database
[PageNo: SeqNo]Change of stable database [PageNo: SeqNo]
Log entry added to log buffer [LogSeqNo: action
Log entries added to stable log [LogSeqNo‘s]
1: begin (t1) 1: begin (t1)
2: begin (t2) 2: begin (t2)
3: p-write (a, t1) a: 3 3: p-write (a, t1)
4: begin (t3) 4: begin (t3)
5: begin (t4) 5: begin (t4)
6: p-write (b, t3) b: 6 6: p-write (b, t3)
7: p-write (c, t2) c: 7 7: p-write (c, t2)
8: p-write (d, t1) d: 8 8: p-write (d, t1)
9: commit (t1) 9: commit (t1) 1, 2, 3, 4, 5, 6, 7, 8, 9
10: flush (d) d: 8
11: p-write (d, t3) d: 11 11: p-write (d, t3)
12: begin (t5) 12: begin (t5)
13: p-write (a, t5) a: 13 13: p-write (a, t5)
14: commit (t3) 14: commit (t3) 11, 12, 13, 14
15: flush (d) d: 11
16: p-write (d, t4) d: 16 16: p-write (d, t4)
17: p-write (e, t2) e: 17 17: p-write (e, t2)
18: p-write (b, t5) b: 18 18: p-write (b, t5)
19: flush (b) b: 18 16, 17, 18
20: commit (t4) 20: commit (t4) 20
21: p-write (f, t5) f: 21 21: p-write (f, t5)
SYSTEM CRASH
10
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
First restart
Sequence number: action Change of cached database [PageNo: SeqNo]
Change of stable database [PageNo: SeqNo]
Log entry added to log buffer [LogSeqNo: action
Log entries added to stable log [LogSeqNo‘s]
redo (3) a: 3
redo (6) b: 6
flush (a) a: 3
redo (8) d: 8
flush (d) d: 8
redo (11) d: 11
SECOND SYSTEM CRASH
Analysis pass: losers = {t2, t5}
Redo pass + :
11
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
Second restart
Sequence number: action Change of cached database [PageNo: SeqNo]
Change of stable database [PageNo: SeqNo]
Log entry added to log buffer [LogSeqNo: action
Log entries added to stable log [LogSeqNo‘s]
redo (3) a: 3
redo (6) b: 6
redo (8) d: 8
redo (11) d: 11
redo(16) d: 16
undo(18) b: 6
undo(17) e: 0
undo(13) a: 3
undo(7) c: 0
SECOND RESTART COMPLETE: RESUME NORMAL OPERATION
Analysis pass: losers = {t2, t5}
Redo pass + undo pass:
12
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
Physiological-write
Folgen der fehlenden Idempotenz: Auf eine Seite, die korrekt in der Datenbasis geführt wird,
kann dieselbe Operation nicht erneut ausgeführt werden. Korrektheit bestand bereits vor dem Systemzusammenbruch
oder entstand durch eine Winner-Aktion vor einem erneuen Zusammenbruch.
Eine korrekte Aktion darf exakt einmal ausgeführt werden. Notwendig ist eine Art „Buchführung“!
Außerhalb Verschiebungen sind partial-writes weiterhin sinnvoll. Um nicht unterscheiden zu müssen: Verwende nicht
idempotente general-writes.
13
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
unpindo(flush)
Segment-Verwalter
General-write: Architektursicht
Transaktion 1 Transaktion 2 ... Transaktion n
Scheduler
Historie 1 Historie n
Sperren-Verwalter
Historie über Datensätzen
Historie über Seiten
Log-datei
Recovery- Backup-Verwalter
Globale Historie aus read, general-write, allocate, unfix, commit, abort
Puffer- Verwalter
Daten-basis
p3 p2 p17 p24 p18 p57
p42 p8 p67 p19 p33 p81
p46 p25 p54 p66 p9 p91
p14 p68 p31 p29 p48 p47
p1 p5 p99 p23 p24 p56
p62 p15 p49 p36 p93 p7
Log-seiten
d4 d43 d17 d15 d2 d58
d5 d9 d26 d69 d6 d16
d46 d68 d55 d32 d97 d49
d25 d20 d67 d30 d49 d37
d19 d34 d10 d24 d25 d94
d63 d82 d49 d92 d57 d8
Daten-seiten
restart
fetch, flush
read, general-write, allocate, unfix general-write:
partial-write oderphysiological-write
Satzverwaltung
Globale Historie aus read, record-write, allocate, unfix, commit, abort Historie über Datensätzen
Voraussetzung der Serialisierbarkeit erfüllt!
14
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
Redo-Winners
var DatabaseCache: set of Page indexed by PageNo;type Page: record of PageNo: identifier; PageSeqNo: identifier; Status: (clean, dirty) /* only cache*/; Contents: array [PageSize] of char; end;var LogBuffer: ordered set of LogEntry indexed by LogSeqNo;type LogEntry: record of LogSeqNo: identifier; TransId: identifier; PageNo: identifier; ActionType: (write, full-write, begin, commit, rollback); UndoInfo: array of char; RedoInfo: array of char; PreviousSeqNo: identifier; end;
type TransInfo: record of TransId: identifier; LastSeqNo: identifier; end;var ActiveTrans: set of TransInfo indexed by TransId
Höchste für die Transaktion vergebene LSN
LSN.
PSN.
Verkettung innerhalb der Transaktion
Wurde auf der Seitenebene nicht genutzt!
Jetzt Mittel der Buchführung!
15
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
Redo-Winners
Trifft der redo-Pass auf einen Log-Eintrag mit LogSeqNo i für Seite p, so wird die eingetragene Aktion nur ausgeführt falls i > PageSeqNo(p). Setze dann PageSeqNo(p):= i.
Trifft der undo-Pass auf einen Log-Eintrag mit LogSeqNo i für Seite p, so wird die eingetragene Aktion nur zurückgesetzt falls i PageSeqNo(p). Setze dann PageSeqNo(p):= i-1.
16
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
1st crash 2nd crash
resumenormaloperation
restartcomplete
analysispass
redopass
undopass
analysispass
redopass
t1
t2
t3
t4
t5
flush(d) flush(d)
1st restart(incomplete)
2nd restart(complete)
w(a)
w(b)
w(c)
w(d)
w(d)
w(a)
w(d)
w(e)
w(b)
flush(b)
w(f)
Sample Scenario
Detailbetrachtung:w(d): Verschieben eines Satzes
17
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
Sample Scenario Data StructuresSequence number: action Change of cached database
[PageNo: SeqNo]Change of stable database [PageNo: SeqNo]
Log entry added to log buffer [LogSeqNo: action
Log entries added to stable log [LogSeqNo‘s]
1: begin (t1) 1: begin (t1)
2: begin (t2) 2: begin (t2)
3: g-write (a, t1) a: 3 3: g-write (a, t1)
4: begin (t3) 4: begin (t3)
5: begin (t4) 5: begin (t4)
6: g-write (b, t3) b: 6 6: g-write (b, t3)
7: g-write (c, t2) c: 7 7: g-write (c, t2)
8: g-write (d, t1) d: 8 8: g-write (d, t1)
9: commit (t1) 9: commit (t1) 1, 2, 3, 4, 5, 6, 7, 8, 9
10: flush (d) d: 8
11: g-write (d, t3) d: 11 11: g-write (d, t3)
12: begin (t5) 12: begin (t5)
13: g-write (a, t5) a: 13 13: g-write (a, t5)
14: commit (t3) 14: commit (t3) 11, 12, 13, 14
15: flush (d) d: 11
16: g-write (d, t4) d: 16 16: g-write (d, t4)
17: g-write (e, t2) e: 17 17: g-write (e, t2)
18: g-write (b, t5) b: 18 18: g-write (b, t5)
19: flush (b) b: 18 16, 17, 18
20: commit (t4) 20: commit (t4) 20
21: g-write (f, t5) f: 21 21: g-write (f, t5)
SYSTEM CRASH
Vermerke Verschiebung
Verschiebung in Datenbasis
Verschiebungs-effekt bleibt erhalten
18
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
First restart
Sequence number: action Change of cached database [PageNo: SeqNo]
Change of stable database [PageNo: SeqNo]
Log entry added to log buffer [LogSeqNo: action
Log entries added to stable log [LogSeqNo‘s]
redo (3) a: 3
consider-redo (6) b: 18
flush (a) a: 3
consider-redo (8) d: 11
consider-redo (11) d: 11
SECOND SYSTEM CRASH
Analysis pass: losers = {t2, t5}
Redo pass + :
Kein redo, da korrekter Zustand durch Aktion 19 bereits in der Datenbasis
Kein redo, da korrekter Zustand durch Aktion 15 bereits in der Datenbasis
19
© 2008 Univ,Karlsruhe, IPD, Prof. Lockemann DBI 7
Second restart
Sequence number: action Change of cached database [PageNo: SeqNo]
Change of stable database [PageNo: SeqNo]
Log entry added to log buffer [LogSeqNo: action
Log entries added to stable log [LogSeqNo‘s]
consider-redo (3) a: 3
consider-redo (6) b: 6
consider-redo (8) d: 8
consider-redo (11) d: 11
redo (16) d: 16
undo (18) b: 6
consider-undo (17) e: 0
consider-undo (13) a: 3
consider-undo (7) c: 0
SECOND RESTART COMPLETE: RESUME NORMAL OPERATION
Analysis pass: losers = {t2, t5}
Redo pass + undo pass:
Erledigt beim ersten restart
Schon beim ersten restart keine Aktion!
Alter Zustand noch in der Datenbasis!