Title: Recovery
1Recovery
2Integrity or correctness of data
- Would like data to be accurate or correct at
all times - EMP
Name
Age
White Green Gray
52 3421 1
3Integrity or consistency constraints
- Predicates data must satisfy
- Examples
- - x is key of relation R
- - x ? y holds in R
- - Domain(x) Red, Blue, Green
- - a is valid index for attribute x of R
- - no employee should make more than twice the
average salary
4Definition
- Consistent state satisfies all constraints
- Consistent DB DB in consistent state
5- Observation DB cannot be consistent always!
- Example a1 a2 . an TOT (constraint)
- Deposit 100 in a2 a2 ? a2 100
- TOT ? TOT 100
6Example a1 a2 . an TOT (constraint) Deposi
t 100 in a2 a2 ? a2 100 TOT ?
TOT 100
. .
. .
. .
50
150
150
. .
. .
. .
1000
1000
1100
7Transaction collection of actions that
preserve consistency
Consistent DB
Consistent DB
T
8How can we prevent/fix violations?
- cc due to data sharing only
- recovery due to failures only
9Will not consider
- How to write correct transactions
- How to write correct DBMS
- Constraint checking repair
- That is, solutions studied here do not need to
know constraints
10x
x
Memory Disk
11Operations
- Input (x) block with x ? memory
- Output (x) block with 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
12Key problem Unfinished transaction
- Example Constraint AB
- T1 A ? A ? 2
- B ? B ? 2
13- T1 Read (A,t) t ? t?2
- Write (A,t)
- Read (B,t) t ? t?2
- Write (B,t)
- Output (A)
- Output (B)
failure!
A 8 B 8
A 8 B 8
16
memory
disk
14 Undo logging
- T1 Read (A,t) t ? t?2 AB
- Write (A,t)
- Read (B,t) t ? t?2
- Write (B,t)
- Output (A)
- Output (B)
A8 B8
A8 B8
ltT1, B, 8gt
ltT1, commitgt
disk
memory
log
15One complication
- Log is first written in memory
- Not written to disk on every action
- memory
- DB
-
- Log
A 8 B 8
A 8 16 B 8 16 Log ltT1,startgt ltT1, A, 8gt ltT1,
B, 8gt
16One complication
- Log is first written in memory
- Not written to disk on every action
- memory
- DB
-
- Log
A 8 B 8
A 8 16 B 8 16 Log ltT1,startgt ltT1, A, 8gt ltT1,
B, 8gt ltT1, commitgt
...
ltT1, B, 8gt ltT1, commitgt
17Undo 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 WAL) - (3) Before commit is flushed to log, all writes
of transaction must be reflected on disk
18Recovery rules Undo logging
- (1) Let S set of transactions with ltTi, startgt
in log, but no - ltTi, commitgt (or ltTi, abortgt) record in log
- (2) For each ltTi, X, vgt in log,
- in reverse order (latest ? earliest) do
- - if Ti ? S then - write (X, v)
- - output (X)
- (3) For each Ti ? S do
- - write ltTi, abortgt to log
19- What if failure during recovery?
- No problem! ? Undo idempotent
20To discuss
- Redo logging
- Undo/redo logging, why both?
- Checkpoints
21Redo logging (deferred modification)
- T1 Read(A,t) t t?2 write (A,t)
- Read(B,t) t t?2 write (B,t)
- Output(A) Output(B)
A 8 B 8
A 8 B 8
DB
memory
LOG
22Redo logging rules
- (1) For every action, generate redo log record
(containing new value) - (2) Before anything is modified on disk (DB), all
log records for transaction that modify things
(including commit) must be on disk
23Recovery rules Redo logging
- (1) Let S set of transactions with ltTi,
commitgt in log - (2) For each ltTi, X, vgt in log, in forward
- order (earliest ? latest) do
- - if Ti ? S then Write(X, v)
- Output(X)
24Recovery is very, very SLOW !
- Redo log
- First T1 wrote A,B Last
- Record Committed a year ago Record
- (1 year ago) --gt STILL, Need to redo after crash!!
...
...
...
Crash
25Undo Recovery Better?
- The first record without commit or abort should
not be too far away from crash - But immediate update itself is expensive
...
...
...
first record without commit or abort
26Solution 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
27Example what to do at recovery?
Crash
...
...
...
...
...
...
28Example what to do at recovery?
Crash
...
...
...
...
...
...
29Nonquiescent Checkingpointing
- Quiescent checkpointing stalls DB
- Nonquiescent checkpointing admits new
transactions while checkpointing
30Nonquiescent Checkpoint Rules - undo
- Write and flush a log record ltSTART CKPT(T1, ,
Tk)gt where T1,,Tk are active transactions - When all T1, , Tk have completed, write and
flush a log record ltEND CKPTgt
31Example what to do at recovery?
Crash
ltEND CKPTgt
ltT2,B,12gt
ltT2,commitgt
...
...
...
...
Crash after end of checkpoint Only need to undo
all the incomplete transactions started after
ltSTART CKPTgt
32Example what to do at recovery?
Crash
ltT2,B,12gt
ltT2,commitgt
...
...
...
...
Crash before end of checkpoint Only need to undo
all incomplete transactions started after ltSTART
CKPTgt and those in ltCKPT ()gt
33Nonquiescent Checkpoint Rules - redo
- Write and flush a log record ltSTART CKPT(T1, ,
Tk) where T1,,Tk are active transactions - Flush all the updates of the transactions
committed before ltSTART CKPT(T1,,Tk)gt - Write and flush a log record ltEND CKPTgt
34Example what to do at recovery?
Crash
ltEND CKPTgt
ltT2,B,12gt
ltT2,commitgt
...
...
...
...
Crash after end of checkpoint Only need to redo
all the transactions committed after the latest
ltSTART CKPTgt
35Example what to do at recovery?
Crash
ltT2,B,12gt
ltT2,commitgt
...
...
...
...
Crash before end of checkpoint Only need to redo
all the transactions committed after the latest
successful ltSTART CKPTgt
36Key drawbacks
- Undo logging need to update immediately,
increasing I/O - Redo logging need to keep all modified blocks in
memory until commit
37Solution undo/redo logging!
- Update ? ltTi, Xid, New X val, Old X valgt
38Rules
- Page X can be flushed before or after Ti commit
- Log record flushed before corresponding updated
page (WAL) - Flush log at commit
39Non-quiesce checkpoint
Start-ckpt active TR Ti,T2,...
end ckpt
...
...
...
Flush dirty buffers
...
40Examples what to do at recovery time?
T1,- a
...
Ckpt T1
...
Ckpt end
...
T1- b
...
? Undo T1 (undo a,b)
41Example
...
T1 a
...
...
T1 b
...
...
T1 c
...
T1 cmt
...
Ckpt end
ckpt-s T1
? Redo T1 (redo b,c)
42Examples what to do at recovery time?
T1,- a
...
Ckpt T1
...
...
T1- b
...
? Undo T1 (all the actions)
43Example
...
T1 a
...
...
T1 b
...
...
T1 c
...
T1 cmt
...
ckpt-s T1
? Redo T1 (redo b,c, a and the actions after
last successful ckp-s)
44Recovery process
- Backwards pass (end of log -gt 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 successful checkpoint start
-gt end of log) - redo actions of S transactions
backward pass
start check- point
forward pass
45Recovery with Checkpoint Summary
- Logging still obey the logging rules
- undo, redo, undo-redo
- Recovery still obey rules
- Undo undo all incomplete transactions
- Redo redo all completed transactions
- Undo-redo combined
- Checkpoint provides a way to limit the
transactions needing undo or redo
46Summary
WAL
47Summary
- Consistency of data
- One source of problems failures
- - WAL