cs4432recovery1 cs4432: database systems ii lecture #20 failure recovery professor elke a....
Post on 21-Dec-2015
214 views
TRANSCRIPT
cs4432 recovery 1
CS4432: Database Systems IILecture #20
Failure Recovery
Professor Elke A. Rundensteiner
cs4432 recovery 2
Transaction: a collection of actions
that preserve consistency
Consistent DB Consistent DB’T
cs4432 recovery 3
Big assumption:
If T starts with consistent state ANDT executes in isolation
T leaves consistent state
cs4432 recovery 5
Operations reStorage Hierarchy:• Input (x): block containing x memory• Output (x): block containing x disk
• Read (x,t): do input(x) if necessary t value of x in block
• Write (x,t): do input(x) if necessary value of x in block t
Memory Disk
x x
cs4432 recovery 7
T1: Read (A,t); t t2Write (A,t);Read (B,t); t t2Write (B,t);Output-to-Disk (A);Output-to-Disk (B);
A: 8B: 8
A: 8B: 8
memory disk
1616
16
failure!
cs4432 recovery 9
One solution: undo logging (immediate
modification)
A la Hansel and Gretel recording their navigation through forest via bread crumbs …
Must have durable undo logging !!!
cs4432 recovery 10
T1: Read (A,t); t t2 A=B
Write (A,t);Read (B,t); t t2Write (B,t);Output-to-disk (A);Output-to-disk (B);
A:8B:8
A:8B:8
memory disk log
Undo logging (Immediate modification)
1616
<T1, start><T1, A, 8>
<T1, commit>16 <T1, B, 8>
16
cs4432 recovery 11
One “complication”
• Log is first written in memory• Not written to disk on every action
memory
DB
Log
A: 8 16B: 8 16Log:<T1,start><T1, A, 8><T1, B, 8>
A: 8B: 8
16BAD STATE
# 1
cs4432 recovery 12
One “complication”
• Log is first written in memory• Not written to disk on every action
memory
DB
Log
A: 8 16B: 8 16Log:<T1,start><T1, A, 8><T1, B, 8><T1, commit>
A: 8B: 8
16BAD STATE
# 2
<T1, B, 8><T1, commit>
...
cs4432 recovery 13
Undo logging rules
(1)For every action generate undo log record (containing old value)
(2) Before x is modified on disk, log records pertaining to x must be
on disk (write ahead logging)(3) Before commit is written to log on
disk, all writes of transaction must be
reflected on disk
cs4432 recovery 14
Recovery rules: Undo logging• For every Ti with <Ti, start> in log:
- If <Ti,commit> or <Ti,abort> in log, do nothing
- Else For all <Ti, X, v> in log:write (X, v)output (X )
Write <Ti, abort> to log
IS THIS CORRECT??
cs4432 recovery 15
Recovery rules: Undo logging
(1) Let S = set of transactions with<Ti, start> in log, but no<Ti, commit> (or <Ti, abort>) record
in log(2) For each <Ti, X, v> in log,
in reverse order (latest earliest) do: - write old value from log back to disk:
- if Ti S then - write (X, v) - output (X)
(3) For each Ti S do- write <Ti, abort> to log
cs4432 recovery 18
Redo logging (deferred modification)
T1: Read(A,t); t t2; write (A,t); Read(B,t); t t2; write (B,t);
Output(A); Output(B)
A: 8B: 8
A: 8B: 8
memory DB LOG
1616
<T1, start><T1, A, 16><T1, B, 16>
<T1, commit>
output16
cs4432 recovery 19
Redo logging rules
(1) For every action, generate redo logrecord (containing new value)
(2) Before X is modified on disk (DB),all log records for transaction that
modified X (including commit) must be on disk
(3) Flush log at commit
cs4432 recovery 20
• Idea: Need to redo if transaction commit is in log because we don’t know if transaction failed or not.
• For every Ti with <Ti, commit> in log:– For all <Ti, X, v> in log:
Write(X, v)Output(X)
Recovery rules: Redo logging
IS THIS CORRECT??
cs4432 recovery 21
(1) Let S = set of transactions with<Ti, commit> in log
(2) For each <Ti, X, v> in log, in forward order (earliest latest) do:
- if Ti S then Write(X, v) Output(X)
optional
Recovery rules: Redo logging
cs4432 recovery 22
Recovery is very, very
SLOW !Redo log:
First T1 wrote A,B LastRecord Committed a year ago
Record(1 year ago) --> STILL, Need to redo after crash!!
... ... ...
Crash
cs4432 recovery 23
Solution: Checkpoint (simple version)
Periodically:(1) Do not accept new transactions(2) Wait until all transactions finish(3) Flush all log records to disk (log)(4) Flush all buffers to disk (DB) (do not discard buffers)
(5) Write “checkpoint” record on disk (log)
(6) Resume transaction processing
cs4432 recovery 24
Example: what to do at recovery?
Redo log (disk):
<T1
,A,1
6>
<T1
,com
mit
>
Ch
eck
poin
t
<T2
,B,1
7>
<T2
,com
mit
>
<T3
,C,2
1>
Crash... ... ... ...
...
...
cs4432 recovery 25
Key drawbacks:
• Undo logging: cannot bring backup DBcopies up to date
• Redo logging: need to keep all modified blocks inmemory
until commit
cs4432 recovery 26
Solution: undo/redo logging!
Combine Undo/Redo Logging, namely:
Update <Ti, Xid, New X val, Old X val>page X
cs4432 recovery 27
Rules
• Page X can be flushed before orafter Ti commit
• Log record flushed before corresponding updated page (WAL)
• Flush at commit (log only)
cs4432 recovery 28
Non-quiesce checkpoint
LOG
for undo dirty buffer
pool pagesflushed
Start-ckptactive TR:
Ti,T2,...
endckpt
.........
...
cs4432 recovery 29
Examples what to do at recovery time?
no T1 commit
LOG
T1,-a
...CkptT1
...Ckptend
...T1-b
...
Undo T1 (undo a,b)
cs4432 recovery 30
Example
LOG
...T1
a... ...
T1
b... ...
T1
c...
T1
cmt...
ckpt-end
ckpt-sT1
Redo T1: (redo b,c)
cs4432 recovery 31
Recovery process:• Backwards pass (end of log latest checkpoint
start)
– construct set S of committed transactions– undo actions of transactions not in S
• Undo pending transactions– follow undo chains for transactions in
(checkpoint active list) - S
• Forward pass (latest checkpoint start end of log)
– redo actions of S transactions
backward pass
forward passstart
check-point