ARIES Example LSNTypeTidPrevLSNData 1SOT1 2UP12A 3 13B 4CP 5SOT3 6UP13C 7SOT2 8UP27D 9EOT16 10UP35B...

30
ARIES Example LSN Type Tid PrevLSN Data 1 SOT 1 2 UP 1 2 A 3 UP 1 3 B 4 CP 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 1 2 3 WA,B CP WC WD WB WA WE CRASH Flush

Transcript of ARIES Example LSNTypeTidPrevLSNData 1SOT1 2UP12A 3 13B 4CP 5SOT3 6UP13C 7SOT2 8UP27D 9EOT16 10UP35B...

ARIES 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 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 - What is Logged

• “Physiological Logging”– REDO Records

• Updates to data pages and index pages are logged separately

• But may use operational logging (e.g., INCREMENT/DECREMENT)– Because escrow locks allow multiple writers

– UNDO Records are Purely Logical• Only one record for index and data pages

• May use operational logging

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

• 3 Phases– Analysis

• Rebuild data structures• Determine winners & losers

– Redo• “Repeat history”

• Why?

– Undo• Undo Losers

AnalysisLSN Type Tid PrevLSN Data

1 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 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– Everything?

• Slow• Problematic if using operational (escrow) logging

– Redo an update UNLESS:1.

2.

3.

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

pgNo recLSN

B 3

C 6

D 8

E 13

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

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

pgNo recLSN

C 6

D 8

E 13

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

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

pgNo recLSN

D 8

E 13

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

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

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

pgNo recLSN

B 10

D 8

E 13

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

B 10

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

pgNo recLSN

A 11

B 10

D 8

E 13

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 11

B 10

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

State identical to pre-crash state

Undo

• Walk backwards, following prevLSNs to UNDO losers

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

lastLSN TID

13 3

xactionTable

Undo

• Walk backwards, following prevLSNs to UNDO losers

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

lastLSN TID

13 3

xactionTable

Undo

• Walk backwards, following prevLSNs to UNDO losers

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

lastLSN TID

13 3

xactionTable

•Why can we just blindly apply UNDOs?

UNDO Wrinkles

• Logical UNDO– Why?

• “Compensation Log Records” -- CLRs– Avoid repeating UNDO work– Why?

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– Use REDO rules to check if updates in CLRs have

already been done

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

• Allows UNDO to start from the right place