Professional Documents
Culture Documents
03/30/2005
Name
Age
13/30/2005
13/30/2005
Definition:
13/30/2005
Observation: DB cannot be consistent always! Example: a1 + a2 +. an = TOT (constraint) Deposit $100 in a2: a2 a2 + 100 TOT TOT + 100
13/30/2005
Example: a1 + a2 +. an = TOT (constraint) Deposit $100 in a2: a2 a2 + 100 TOT TOT + 100
a2
. . 50
. . 1000
. . 150
. . 1000
. . 150
. . 1100
TOT
13/30/2005
Consistent DB
Consistent DB
13/30/2005
13/30/2005
How to write correct transactions How to write correct DBMS Constraint checking & repair
That is, solutions studied here do not need to know constraints
13/30/2005
Storage hierarchy
x Memory
x Disk
13/30/2005
Operations:
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
13/30/2005
Example
13/30/2005
T1:
Read (A,t); t t2 Write (A,t); Read (B,t); t t2 Write (B,t); Output (A); Output (B);
failure!
A: 8 16 B: 8 16
memory
13/30/2005
A: 8 16 B: 8
disk
Yan Huang - CSCI5330 Database Implementation Recovery
Undo logging
T1: Read (A,t); t t2 Write (A,t); Read (B,t); t t2 Write (B,t); Output (A); Output (B); A=B
A:8 16 B:8 16
memory
13/30/2005
A:8 16 B:8 16
disk
Yan Huang - CSCI5330 Database Implementation Recovery
One complication
A: 8 16 B: 8
DB Log
BAD STATE #1
13/30/2005
One complication
A: 8 16 B: 8
DB Log
BAD STATE #2
...
(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
13/30/2005
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: - if Ti S then - write (X, v) - output (X)
13/30/2005
13/30/2005
To discuss:
13/30/2005
T1:
Read(A,t); t t2; write (A,t); Read(B,t); t t2; write (B,t); Output(A); Output(B) <T1, start> <T1, A, 16> <T1, B, 16> <T1, commit> LOG
A: 8 16 B: 8 16
memory
13/30/2005
output
A: 8 16 B: 8
DB
(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
13/30/2005
Recovery rules:
Redo logging
(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)
13/30/2005
SLOW !
Redo log:
...
...
...
T1 wrote A,B Committed a year ago --> STILL, Need to redo after crash!!
Last Record
Crash
13/30/2005
The first record without commit or abort should not be too far away from crash
...
...
...
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
13/30/2005
...
...
...
...
...
...
Crash
13/30/2005
...
...
...
...
...
...
Crash
13/30/2005
Nonquiescent Checkingpointing
Quiescent checkpointing stalls DB Nonquiescent checkpointing admits new transactions while checkpointing
13/30/2005
Write and flush a log record <START CKPT(T1, , Tk)> where T1,,Tk are active transactions When all T1, , Tk have completed, write and flush a log record <END CKPT>
13/30/2005
<T2,commit>
<T1,commit>
<END CKPT>
<T2,B,12>
<T3,C,21>
<T3,B,17>
<T1,A,8>
...
...
...
...
Crash
Only need to undo all the incomplete transactions started after <START CKPT>
13/30/2005 Yan Huang - CSCI5330 Database Implementation Recovery
<T2,commit>
<T1,commit>
<T2,B,12>
<T3,C,21>
<T3,B,17>
<T1,A,8>
...
...
...
...
Crash
Only need to undo all incomplete transactions started after <START CKPT> and those in <CKPT ()>
13/30/2005 Yan Huang - CSCI5330 Database Implementation Recovery
Write and flush a log record <START CKPT(T1, , Tk) where T1,,Tk are active transactions Flush all the updates of the transactions committed before <START CKPT(T1,,Tk)> Write and flush a log record <END CKPT>
13/30/2005
<T2,commit>
<T1,commit>
<END CKPT>
<T2,B,12>
<T3,C,21>
<T3,B,17>
<T1,A,8>
...
...
...
...
Crash
Only need to redo all the transactions committed after the latest <START CKPT>
13/30/2005 Yan Huang - CSCI5330 Database Implementation Recovery
<T2,commit>
<T1,commit>
<T2,B,12>
<T3,C,21>
<T3,B,17>
<T1,A,8>
...
...
...
...
Crash
Only need to redo all the transactions committed after the latest successful <START 13/30/2005 Yan Huang - CSCI5330 Database CKPT> Implementation Recovery
Key drawbacks:
Undo logging: need to update immediately, increasing I/O Redo logging: need to keep all modified blocks in memory until commit
13/30/2005
13/30/2005
Rules
Page X can be flushed before or after Ti commit Log record flushed before corresponding updated page (WAL) Flush log at commit
13/30/2005
Non-quiesce checkpoint
L O G
...
Flush dirty buffers
end ckpt
...
13/30/2005
L O G
...
T1,a
...
Ckpt T1
...
Ckpt end
...
T 1b
13/30/2005
Example
L O G
ckpt-s T1 T1 Ckpt T1 T1 ... ... T1 ... ... ... ... ... a b end c cmt
13/30/2005
L O G
...
T1,a
...
Ckpt T1
...
...
T 1b
13/30/2005
Example
L O G
ckpt-s T1 T1 ... ... T1 ... ... a b
Redo T1: (redo b,c, a and the actions after last successful ckp-s)
13/30/2005
Recovery process:
construct set S of committed transactions undo actions of transactions not in S follow undo chains for transactions in (checkpoint active list) - S redo actions of S transactions
start checkpoint
13/30/2005
backward pass
forward pass
Yan Huang - CSCI5330 Database Implementation Recovery
undo, redo, undo-redo Undo: undo all incomplete transactions Redo: redo all completed transactions Undo-redo: combined
13/30/2005
Summary
undo commit
commit means all updates on disk
WAL
redo
Commit means some updates may start to migrate to disk
Undo-redo
Commit does not signal disk update
recovery
Nonquiescent ckpt
<end ckpt(T)> means every tran started before the matching <start ckpt (T)> is on disk
<end ckpt(T)> means every tran committed before the matching <start ckpt(T)> is on disk
<end ckpt(T)> means every update before the matching <start ckpt(T)> is on disk
13/30/2005
Summary
13/30/2005