Skip to content

5_1. Redo Winners Protocol

김영서 edited this page Oct 7, 2021 · 1 revision

Redo-Winners Protocol

Recovery를 진행하는 시점에서 Commit을 완료한 트랜잭션은 Winner, 완료하지 못 한 트랜잭션은 Loser라고 하겠습니다.

Redo-Winners Protocol은 먼저 Winner의 모든 내용들을 REDO하고, 이후 Loser의 내용들을 UNDO 하는 프로토콜입니다.

성공한 트랜잭션의 내용을 모두 REDO하고, 실패한 트랜잭션의 내용은 UNDO하기 때문에 정상적으로 동작할 것 같지만 자발적으로 Abort를 수행한 트랜잭션은 Commit 로그가 없기 때문에 Loser로 취급되어 아래와 같은 문제가 발생합니다.

Scenario with Abort

  1. Data - a: 0
  2. TRX1 - a: 0 → a: 1
  3. TRX1 - COMMIT
  4. TRX2 - a: 1 → a: 5
  5. TRX2 - ABORT, a: 5 → a: 1 (Undo 작업에 대한 로그를 발급하지 않는다)
  6. TRX3 - a: 1 → a: 8
  7. TRX3 - COMMIT
  8. SYSTEM CRASH

Recovery Scenario with Abort

Winner: TRX1, TRX3

Loser: TRX2

  • REDO Phase
    1. Consider-Redo (TRX1 - a: 0 → a: 1)
    2. Consider-Redo (TRX3 - a: 1 → a: 8)
  • UNDO Phase
    1. Undo (TRX2 - a: 5 → a: 1)

정상적으로 동작한 경우 a: 8이 되어야 하지만 Undo 작업에 대한 로그를 발급하지 않기 때문에 a: 1이 되었습니다.


Compensate Log Record (CLR)

위와 같은 문제를 해결하기 위해 정상적으로 Abort를 완료한 트랜잭션에게 ROLLBACK Log를 발급하고, Rollback에서 수행한 Undo 작업에 대해 CLR을 발급합니다.

CLR에 대한 CLR은 발급하지 않습니다. 즉, Rollback의 Undo 작업에 대한 CLR은 하나의 Log에 대해 하나만 발행합니다.

Senario with Abort (+ CLR)

  1. Data - a: 0
  2. TRX1 - a: 0 → a: 1
  3. TRX1 - COMMIT
  4. TRX2 - a: 1 → a: 5
  5. TRX2 - ABORT
  6. TRX2 - a: 5 → a: 1 (COMPENSATE)
  7. TRX2 - ROLLBACK
  8. TRX3 - a: 1 → a: 8
  9. TRX3 - COMMIT
  10. SYSTEM CRASH

Recovery Scenario with Abort (+ CLR)

Winner: TRX1, TRX2, TRX3

Loser: None

  • REDO Phase
    1. Consider-Redo (TRX1 - a: 0 → a: 1)
    2. Consider-Redo (TRX2 - a: 1 → a: 5)
    3. Consider-Redo (TRX2 - a: 5 → a: 1) → CLR
    4. Consider-Redo (TRX3 - a: 1 → a: 8)
  • UNDO Phase
    1. No Losers - Do Nothing

정상적으로 a: 8이 되었습니다.

Clone this wiki locally