Logging and ARIES. ARIES Example LSNTypeTidPrevLSNData 1SOT1 2UP11A 3 12B 4CP 5SOT3 6UP13C 7SOT2...

31
Logging and ARIES

Transcript of Logging and ARIES. ARIES Example LSNTypeTidPrevLSNData 1SOT1 2UP11A 3 12B 4CP 5SOT3 6UP13C 7SOT2...

Logging and ARIES

ARIES Example

LSN Type Tid PrevLSN Data1 SOT 12 UP 1 1 A3 UP 1 2 B4 CP5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 610 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

1

2

3

WA,B

CP

WC

WD

WB

WA

WE

CRASH

Flush

ARIES Data Structures

12

3

WA,B

CP

WC

WD

WB

WA

WE

CRASH

Flush

lastLSN TID

1 1

xactionTablepgNo recLSN

dirtyPgTable

xactionTable

dirtyPgTable

Checkpoint

Page pageLSN

A ?

B ?

C ?

D ?

E ?

Disk

lastLSN TID

2 1

lastLSN TID

3 1

lastLSN TID

3 1

5 3

lastLSN TID

13 3

pgNo recLSN

A 2

B 3

pgNo recLSN

A 2

B 3

C 6

Page pageLSN

A 2

B 3

C 6

D ?

E ?

pgNo recLSNpgNo recLSN

D 8

pgNo recLSN

D 8

B 10

pgNo recLSN

D 8

B 10

A 11

pgNo recLSN

D 8

B 10

A 11

E 13

xactionTable 3 - 1

dirtyPgTable A - 2, B - 3

Crash Recovery Phases

1. Analysis– Find earliest useful log record– Rebuild xactionTable and dirtyPgTable– Determine winners & losers

2. Redo– Redo all updates, even from losers (“repeat history”)– Why?

3. Undo– Undo Losers

AnalysisLSN Type Tid PrevLSN Data

1 SOT 12 UP 1 1 A3 UP 1 2 B4 CP5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 610 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

AnalysisLSN Type Tid PrevLSN Data

5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 610 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

lastLSN TID

3 1

pgNo recLSN

A 2

B 3

Page pageLSN

A 2

B 3

C 6

D ?

E ?

xactionTable dirtyPgTableDisk

AnalysisLSN Type Tid PrevLSN Data

5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 610 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

lastLSN TID

3 1

5 3

pgNo recLSN

A 2

B 3

Page pageLSN

A 2

B 3

C 6

D ?

E ?

xactionTable dirtyPgTableDisk

AnalysisLSN Type Tid PrevLSN Data

5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 610 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

lastLSN TID

3 1

5 3

pgNo recLSN

A 2

B 3

C 6

Page pageLSN

A 2

B 3

C 6

D ?

E ?

xactionTable dirtyPgTableDisk

AnalysisLSN Type Tid PrevLSN Data

5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 610 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

lastLSN TID

3 1

5 3

7 2

pgNo recLSN

A 2

B 3

C 6

Page pageLSN

A 2

B 3

C 6

D ?

E ?

xactionTable dirtyPgTableDisk

AnalysisLSN Type Tid PrevLSN Data

5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 610 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

lastLSN TID

3 1

5 3

7 2

pgNo recLSN

A 2

B 3

C 6

D 8

Page pageLSN

A 2

B 3

C 6

D ?

E ?

xactionTable dirtyPgTableDisk

AnalysisLSN Type Tid PrevLSN Data

5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 610 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

lastLSN TID

13 3

pgNo recLSN

A 2

B 3

C 6

D 8

E 13

Page pageLSN

A 2

B 3

C 6

D ?

E ?

xactionTabledirtyPgTable Disk

Not the same as just beforecrash (note disk state)

Redo

• Where to begin?– Checkpoint?

– Min(recLSN)!

• What to REDO?

pgNo recLSN

A 2

B 3

C 6

D 8

E 13

dirtyPgTable

Page pageLSN

A 2

B 3

C 6

D ?

E ?

Disk

Redo Example

LSN Type Tid PrevLSN Data1 SOT 12 UP 1 2 A3 UP 1 3 B4 CP5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 6

10 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

pgNo recLSN

A 2

B 3

C 6

D 8

E 13

Redo UNLESS• Page is not in dirtyPgTable• If LSN < recLSN• If LSN <= pageLSN

DirtyPgTable

Page pageLSN

A 2

B 3

C 6

D ?

E ?

Disk

Redo Example

LSN Type Tid PrevLSN Data1 SOT 12 UP 1 2 A3 UP 1 3 B4 CP5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 6

10 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

pgNo recLSN

A 2

B 3

C 6

D 8

E 13

Redo UNLESS• Page is not in dirtyPgTable• If LSN < recLSN• If LSN <= pageLSN

DirtyPgTable

Page pageLSN

A 2

B 3

C 6

D ?

E ?

Disk

Redo Example

LSN Type Tid PrevLSN Data1 SOT 12 UP 1 2 A3 UP 1 3 B4 CP5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 6

10 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

pgNo recLSN

A 2

B 3

C 6

D 8

E 13

Redo UNLESS• Page is not in dirtyPgTable• If LSN < recLSN• If LSN <= pageLSN

DirtyPgTable

Page pageLSN

A 2

B 3

C 6

D ?

E ?

Disk

Redo Example

LSN Type Tid PrevLSN Data1 SOT 12 UP 1 2 A3 UP 1 3 B4 CP5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 6

10 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

pgNo recLSN

A 2

B 3

C 6

D 8

E 13

Redo UNLESS• Page is not in dirtyPgTable• If LSN < recLSN• If LSN <= pageLSN

DirtyPgTable

Page pageLSN

A 2

B 3

C 6

D ?

E ?

Disk

Redo Example

LSN Type Tid PrevLSN Data1 SOT 12 UP 1 2 A3 UP 1 3 B4 CP5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 6

10 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

pgNo recLSN

A 2

B 3

C 6

D 8

E 13

Redo UNLESS• Page is not in dirtyPgTable• If LSN < recLSN• If LSN <= pageLSN

DirtyPgTable

Page pageLSN

A 2

B 3

C 6

D ?

E ?

Disk

Redo Example

LSN Type Tid PrevLSN Data1 SOT 12 UP 1 2 A3 UP 1 3 B4 CP5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 6

10 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

pgNo recLSN

A 2

B 3

C 6

D 8

E 13

Redo UNLESS• Page is not in dirtyPgTable• If LSN < recLSN• If LSN <= pageLSN

DirtyPgTable

Page pageLSN

A 2

B 3

C 6

D ?

E ?

Disk

Redo Example

LSN Type Tid PrevLSN Data1 SOT 12 UP 1 2 A3 UP 1 3 B4 CP5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 6

10 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

pgNo recLSN

A 2

B 3

C 6

D 8

E 13

Redo UNLESS• Page is not in dirtyPgTable• If LSN < recLSN• If LSN <= pageLSN

DirtyPgTable

Page pageLSN

A 2

B 3

C 6

D ?

E ?

Disk

Buffer/disk pages same as pre-crash

Undo

• Walk backwards, following prevLSNs to UNDO losers

LSN Type Tid PrevLSN Data1 SOT 12 UP 1 1 A3 UP 1 2 B4 CP5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 6

10 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

lastLSN TID

13 3

xactionTable

Undo

• Walk backwards, following prevLSNs to UNDO losers

LSN Type Tid PrevLSN Data1 SOT 12 UP 1 1 A3 UP 1 2 B4 CP5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 6

10 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

lastLSN TID

13 3

xactionTable

Undo

• Walk backwards, following prevLSNs to UNDO losers

LSN Type Tid PrevLSN Data1 SOT 12 UP 1 1 A3 UP 1 2 B4 CP5 SOT 36 UP 1 3 C7 SOT 28 UP 2 7 D9 EOT 1 6

10 UP 3 5 B11 UP 2 8 A12 EOT 2 1113 UP 3 10 E

lastLSN TID

13 3

xactionTable

What does UNDO do?

• Why is it safe to undo an op from middle of log?

• What if the operation split a B+Tree block?

Crash during UNDO phase?

– Example:• T1 starts

• T1 deletes tuple, modifies heapfile, B+Tree index

• DB writes all dirty pages to disk

• checkpoint

• crash

– Nothing to redo– Undo phase starts to modify heapfile/B+Tree, writes

some pages to disk, crash again.– Will the 2nd recovery work correctly?

UNDO with CLRLSN Type Tid PrevLSN Data

5 SOT 3

6 UP 1 3 C

7 SOT 2

8 UP 2 7 D

9 EOT 1 6

10 UP 3 5 B

11 UP 2 8 A

12 EOT 2 11

13 UP 3 10 E

Losers: 3

UNDO with CLRLSN Type Tid PrevLSN Data

5 SOT 3

6 UP 1 3 C

7 SOT 2

8 UP 2 7 D

9 EOT 1 6

10 UP 3 5 B

11 UP 2 8 A

12 EOT 2 11

13 UP 3 10 E

UNDO with CLRLSN Type Tid PrevLSN Data

5 SOT 3

6 UP 1 3 C

7 SOT 2

8 UP 2 7 D

9 EOT 1 6

10 UP 3 5 B

11 UP 2 8 A

12 EOT 2 11

13 UP 3 10 E

14 CLR 3 E

UNDO with CLRLSN Type Tid PrevLSN Data

5 SOT 3

6 UP 1 3 C

7 SOT 2

8 UP 2 7 D

9 EOT 1 6

10 UP 3 5 B

11 UP 2 8 A

12 EOT 2 11

13 UP 3 10 E

14 CLR 3 10 E

UNDO with CLRLSN Type Tid PrevLSN Data

5 SOT 3

6 UP 1 3 C

7 SOT 2

8 UP 2 7 D

9 EOT 1 6

10 UP 3 5 B

11 UP 2 8 A

12 EOT 2 11

13 UP 3 10 E

14 CLR 3 10 E

15 CLR 3 5 B

UNDO with CLRLSN Type Tid PrevLSN Data

5 SOT 3

6 UP 1 3 C

7 SOT 2

8 UP 2 7 D

9 EOT 1 6

10 UP 3 5 B

11 UP 2 8 A

12 EOT 2 11

13 UP 3 10 E

14 CLR 3 10 E

15 CLR 3 5 B

16 EOT 3 -

REDO with CLR

• REDO CLRs on crash recovery– Just like redo of ordinary update– CLR is the physical redo version of the logical undo– Each CLR has an entire undo’s worth of redo info

• Thus redo w/ CLRs yields action consistency

– After processing CLR, update lastLSN field in xactionTable to point to prevLSN of CLR

• Allows UNDO to start from the right place