1 lecture 12: transactions: recovery. 2 outline recovery undo logging redo logging undo/redo logging...

34
1 Lecture 12: Transactions: Recovery

Upload: levi-boxer

Post on 14-Dec-2015

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

1

Lecture 12:Transactions: Recovery

Page 2: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

2

Outline

• Recovery

• Undo Logging

• Redo Logging

• Undo/Redo Logging

Book Section 15.1, 15.2, 23, 24, 25

Page 3: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

3

Recovery

Type of Crash Prevention

Wrong data entryConstraints andData cleaning

Disk crashesRedundancy:

e.g. RAID, archive

Fire, theft, bankruptcy…

Buy insurance, Change jobs…

System failures:e.g. power

DATABASERECOVERY

Mostfrequent

Page 4: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

4

Transactions

• Assumption: the database is composed of elements– Usually 1 element = 1 block– Can be smaller (=1 record) or larger (=1

relation)

• Assumption: each transaction reads/writes some elements

Page 5: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

5

Primitive Operationsof Transactions

• X database object

• t local (program) variable

program (memory) memory buffer database

XXt

INPUT(X)READ(X,t)

WRITE(X,t) OUTPUT(X)

Page 6: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

6

ExampleREAD(A,t); t := t*2;WRITE(A,t); READ(B,t); t := t*2;WRITE(B,t)

Action t Mem A Mem B Disk A Disk B

INPUT(A) 8 8 8

REAT(A,t) 8 8 8 8

t:=t*2 16 8 8 8

WRITE(A,t) 16 16 8 8

INPUT(B) 16 16 8 8 8

READ(B,t) 8 16 8 8 8

t:=t*2 16 16 8 8 8

WRITE(B,t) 16 16 16 8 8

OUTPUT(A) 16 16 16 16 8

OUTPUT(B) 16 16 16 16 16

Page 7: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

7

System Failures

• Each transaction has internal state

• When system crashes, internal state is lost– Don’t know which parts executed and which

didn’t

• Remedy: use a log– A file that records every single action of the

transaction

Page 8: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

8

The Log

• An append-only file containing log records

• Note: multiple transactions run concurrently, log records are interleaved

• After a system crash, use log to:– Redo some transaction that didn’t commit– Undo other transactions that didn’t commit

• Three kinds of logs: undo, redo, undo/redo

Page 9: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

9

Undo Logging

Log records• <START T>

– transaction T has begun

• <COMMIT T> – T has committed

• <ABORT T>– T has aborted

• <T,X,v>– T has updated element X, and its old value was v

Page 10: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

10

Undo-Logging Rules

U1: If T modifies X, then <T,X,v> must be written to disk before X is output to disk

U2: If T commits, then <COMMIT T> must be written to disk only after all changes by T are output to disk

• Hence: OUTPUTs are done early, before the transaction commits

Page 11: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

11

Action T Mem A Mem B Disk A Disk B Log

<START T>

REAT(A,t) 8 8 8 8

t:=t*2 16 8 8 8

WRITE(A,t) 16 16 8 8 <T,A,8>

READ(B,t) 8 16 8 8 8

t:=t*2 16 16 8 8 8

WRITE(B,t) 16 16 16 8 8 <T,B,8>

OUTPUT(A) 16 16 16 16 8

OUTPUT(B) 16 16 16 16 16

<COMMIT T>

Page 12: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

12

Recovery with Undo Log

……<T6,X6,v6>……<START T5><START T4><T1,X1,v1><T5,X5,v5><T4,X4,v4><COMMIT T5><T3,X3,v3><T2,X2,v2>

Question1:Which updates are undone ?

Question 2:How far back do we need toread in the log ?

crash

Page 13: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

13

Recovery with Undo Log

After system’s crash, run recovery manager • Idea 1. Decide for each transaction T

whether it is completed or not– <START T>….<COMMIT T>…. = yes– <START T>….<ABORT T>……. = yes– <START T>……………………… = no

• Idea 2. Undo all modifications by incomplete transactions

Page 14: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

14

Recovery with Undo Log

Recovery manager:

• Read log from the end; cases:– <COMMIT T>: mark T as completed– <ABORT T>: mark T as completed– <T,X,v>: if T is not completed

then write X=v to disk else ignore

– <START T>: ignore

Page 15: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

15

Recovery with Undo Log

• Note: all undo commands are idempotent– If we perform them a second time, no harm is

done– E.g. if there is a system crash during recovery,

simply restart recovery from scratch

Page 16: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

16

Recovery with Undo Log

When do we stop reading the log ?

• We cannot stop until we reach the beginning of the log file

• This is impractical

• Better idea: use checkpointing

Page 17: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

17

Checkpointing

Checkpoint the database periodically

• Stop accepting new transactions

• Wait until all current transactions complete

• Write a <CKPT> log record

• Resume transactions

Page 18: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

18

Undo Recovery with Checkpointing

……<T9,X9,v9>……(all completed)<CKPT><START T2><START T3<START T5><START T4><T1,X1,v1><T5,X5,v5><T4,X4,v4><COMMIT T5><T3,X3,v3><T2,X2,v2>

During recovery,Can stop at first<CKPT>

transactions T2,T3,T4,T5

other transactions

crash

Page 19: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

19

Nonquiescent Checkpointing

• Problem with checkpointing: database freezes during checkpoint

• Would like to checkpoint while database is operational

• Idea: nonquiescent checkpointing

Quiescent = being quiet, still, or at rest; inactiveNon-quiescent = allowing transactions to be active

Page 20: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

20

Nonquiescent Checkpointing

• Write a <START CKPT(T1,…,Tk)>where T1,…,Tk are all active transactions

• Continue normal operation

• When all of T1,…,Tk have completed, write <END CKPT>

Page 21: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

21

Undo Recovery with Nonquiescent Checkpointing

………………<START CKPT T4, T5, T6>…………<END CKPT>………

During recovery,Can stop at first<CKPT>

(provided an <END CKPT>is seen)

T4, T5, T6, plus later transactions

earlier transactions plus T4, T5, T6

later transactionsQ: why do we need <END CKPT> ?

Q: why do we need <END CKPT> ?

crash

Page 22: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

22

Redo Logging

Log records

• <START T> = transaction T has begun

• <COMMIT T> = T has committed

• <ABORT T>= T has aborted

• <T,X,v>= T has updated element X, and its new value is v

Page 23: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

23

Redo-Logging Rules

R1: If T modifies X, then both <T,X,v> and <COMMIT T> must be written to disk before X is written to disk

• Hence: OUTPUTs are done late

Page 24: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

24

Action T Mem A Mem B Disk A Disk B Log

<START T>

REAT(A,t) 8 8 8 8

t:=t*2 16 8 8 8

WRITE(A,t) 16 16 8 8 <T,A,16>

READ(B,t) 8 16 8 8 8

t:=t*2 16 16 8 8 8

WRITE(B,t) 16 16 16 8 8 <T,B,16>

<COMMIT T>

OUTPUT(A) 16 16 16 16 8

OUTPUT(B) 16 16 16 16 16

Page 25: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

25

Recovery with Redo Log

<START T1><T1,X1,v1><START T2><T2, X2, v2><START T3><T1,X3,v3><COMMIT T2><T3,X4,v4><T1,X5,v5>……

Question1:Which updates are redone ?

Question 2:How far back do we need toread in the log ?

crash

Page 26: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

26

Recovery with Redo Log

After system’s crash, run recovery manager • Step 1. Decide for each transaction T

whether it is completed or not– <START T>….<COMMIT T>…. = yes– <START T>….<ABORT T>……. = yes– <START T>……………………… = no

• Step 2. Read log from the beginning, redo all updates of committed transactions

Page 27: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

27

Nonquiescent Checkpointing

• Write a <START CKPT(T1,…,Tk)>where T1,…,Tk are all active transactions

• Flush to disk all blocks of committed transactions (dirty blocks), while continuing normal operation

• When all blocks have been written, write <END CKPT>

Page 28: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

28

Redo Recovery with Nonquiescent Checkpointing

…<START T1>…<COMMIT T1>…<START T4>…<START CKPT T4, T5, T6>…………<END CKPT>………<START CKPT T9, T10>…

Step 1: look forThe last<END CKPT>

Step 2: findcorresponding<START CKPT …>

Step 3: redo from the earliest start of a transaction listed in <START CKPT …>, i.e. T4, T5, T6

(transactionscommittedearlier can be ignored)All OUTPUTs

of T1 areknown to be on disk

crash

Page 29: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

29

Comparison Undo/Redo

• Undo logging:– OUTPUT must be done early– If <COMMIT T> is seen, T definitely has written all its data to disk

(hence, don’t need to redo)– inefficient, since changes from different transactions cannot be

"accumulated" in the memory buffer

• Redo logging– OUTPUT must be done late– If <COMMIT T> is not seen, T definitely has not written any of its data to

disk (hence there is not dirty data on disk, no need to undo)– inflexible, since changes cannot be written early to the disk and large

transactions might require lots of memory buffer

• Would like more flexibility on when to OUTPUT: undo/redo logging (next)

Page 30: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

30

Undo/Redo Logging

Log records, only one change

• <T,X,u,v>= T has updated element X, its old value was u, and its new value is v

Page 31: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

31

Undo/Redo-Logging Rule

UR1: If T modifies X, then <T,X,u,v> must be written to disk before X is written to disk

Note: we are free to OUTPUT early or late (i.e. before or after <COMMIT T>)

Page 32: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

32

Action T Mem A Mem B Disk A Disk B Log

<START T>

REAT(A,t) 8 8 8 8

t:=t*2 16 8 8 8

WRITE(A,t) 16 16 8 8 <T,A,8,16>

READ(B,t) 8 16 8 8 8

t:=t*2 16 16 8 8 8

WRITE(B,t) 16 16 16 8 8 <T,B,8,16>

OUTPUT(A) 16 16 16 16 8

<COMMIT T>

OUTPUT(B) 16 16 16 16 16

Page 33: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

33

Recovery with Undo/Redo Log

After system’s crash, run recovery manager • Redo all committed transaction, top-down• Undo all uncommitted transactions, bottom-up

Page 34: 1 Lecture 12: Transactions: Recovery. 2 Outline Recovery Undo Logging Redo Logging Undo/Redo Logging Book Section 15.1, 15.2, 23, 24, 25

34

Recovery with Undo/Redo Log

<START T1><T1,X1,u1,v1><START T2><T2, X2,u2,v2><START T3><T1,X3,u3,v3><COMMIT T2><T3,X4,u4,v4><T1,X5,u5,v5>

crash

Redo T2 Undo T1, T3