19. Recovery System
Failure Classification
- Transaction ์คํจ
- Logical errors: ๋ด๋ถ ์ค๋ฅ ์กฐ๊ฑด์ผ๋ก ์ธํด transaction์ด ์๋ฃ๋ ์ ์๋ ์ํฉ
- System errors: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ด ์ค๋ฅ ์กฐ๊ฑด(์: deadlock)์ผ๋ก ์ธํด ํ์ฑ transaction์ ์ข ๋ฃํด์ผ ํ๋ ์ํฉ
- System crash
- ์ ์ ์คํจ ๋๋ ๊ธฐํ ํ๋์จ์ด/์ํํธ์จ์ด ์คํจ๋ก ์์คํ ๋ถ๊ดด ๋ฐ์
- Fail-stop assumption: ๋นํ๋ฐ์ฑ ์ ์ฅ ์ฅ์น ๋ด์ฉ์ System crash๋ก ์ธํด ์์๋์ง ์๋๋ค๊ณ ๊ฐ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๋์คํฌ ๋ฐ์ดํฐ ์์์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ค์์ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ ์ํ
- Disk failure: ํค๋ ํฌ๋์๋ ์ ์ฌํ ๋์คํฌ ์ค๋ฅ๋ก ์ธํด ๋์คํฌ ์ ์ฅ์์ ์ผ๋ถ ๋๋ ์ ์ฒด ํ๊ดด
- ํ๊ดด๋ ๊ฐ์ง ๊ฐ๋ฅํ๋ค๊ณ ๊ฐ์
- ๋์คํฌ ๋๋ผ์ด๋ธ๋ checksum์ ์ฌ์ฉํ์ฌ failure ๊ฐ์ง
- ํ๊ดด๋ ๊ฐ์ง ๊ฐ๋ฅํ๋ค๊ณ ๊ฐ์
Data Access
- Physical blocks๋ ๋์คํฌ์ ์์ฃผํ๋ ๋ธ๋ก
- Buffer blocks๋ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ผ์์ ์ผ๋ก ์์ฃผํ๋ ๋ธ๋ก
- ๋์คํฌ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ๋ธ๋ก ์ด๋์ ๋ค์ ๋ ๊ฐ์ง ์ฐ์ฐ์ ํตํด ์์
- : Physical block ๋ฅผ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ก ์ ์ก
- : buffer block ๋ฅผ ๋์คํฌ๋ก ์ ์กํ๊ณ ํด๋น Physical block์ ๊ต์ฒด
- ๋จ์ํ๋ฅผ ์ํด ๊ฐ ๋ฐ์ดํฐ ์์ดํ ์ ๋จ์ผ ๋ธ๋ก ๋ด์ ์ ์ฌ ๋ฐ ์ ์ฅ๋๋ค๊ณ ๊ฐ์
- ๊ฐ transaction ๋ ์ ๊ทผ ๋ฐ ์
๋ฐ์ดํธํ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์์ดํ
์ ๋ก์ปฌ ๋ณต์ฌ๋ณธ์ ์ ์งํ๋ private work-area ๋ณด์
- ๋ฐ์ดํฐ ์์ดํ ์ ๋ํ ์ ๋ก์ปฌ ๋ณต์ฌ๋ณธ์ ๋ผ๊ณ ์ง์นญ

- ์์คํ
buffer blocks์ private work-area ๊ฐ์ ๋ฐ์ดํฐ ์์ดํ
์ ์ก ์ํ ๋ฐฉ์
- : ๋ฐ์ดํฐ ์์ดํ ์ ๊ฐ์ ๋ก์ปฌ ๋ณ์ ์ ํ ๋น
- : ๋ก์ปฌ ๋ณ์ ์ ๊ฐ์ buffer block ๋ด์ ๋ฐ์ดํฐ ์์ดํ ์ ํ ๋น
- ๋ ๊ฒฝ์ฐ ๋ชจ๋, ๊ฐ ์์ฃผํ๋ ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์๋ค๋ฉด ๋จผ์ ๋ฐํ
- ์ฐธ๊ณ : ๊ฐ ์งํ์ ์ํ๋ ํ์๋ ์์. ์์คํ ์ ์ ์ ํ๋ค๊ณ ํ๋จ๋ ๋ output ์ฐ์ฐ ์ํ ๊ฐ๋ฅ
- Transactions
- ์ ์ฒ์ ์ ๊ทผํ๊ธฐ ์ ์ ๋ฐ๋์ ์ํ(์ดํ์ ์ฝ๊ธฐ๋ ๋ก์ปฌ ๋ณต์ฌ๋ณธ์์ ๊ฐ๋ฅ)
- ๋ transaction์ด commit ๋๊ธฐ ์ ์ธ์ ๋ ์ง ์คํ ๊ฐ๋ฅ
Recovery Algorithms
- Transaction ๊ฐ ๊ณ์ข ์์ ๊ณ์ข ๋ก 50๋ฌ๋ฌ๋ฅผ ์ด์ฒดํ๋ค๊ณ ๊ฐ์
- ๋ ๊ฐ์ง ์ ๋ฐ์ดํธ: ์์ 50 ์ฐจ๊ฐ ๋ฐ ์ 50 ์ถ๊ฐ
- Transaction ๋ ์ ์ ๋ํ ์
๋ฐ์ดํธ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ถ๋ ฅ๋๊ธฐ๋ฅผ ์๊ตฌ
- ์์ ์ค ํ๋๋ง ์ด๋ฃจ์ด์ง๊ณ ๋์คํฌ์ ์ถ๋ ฅ๋ ํ(์ฆ, ๊ฐ ์์ง uncommitted ์ํ) ์คํจ ๋ฐ์ ๊ฐ๋ฅ
- ์ด๋ฌํ ์คํจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋น์ผ๊ด์ ์ธ ์ํ๋ก ๋ง๋ฆ โ (uncommitted) ์ atomicity๊ฐ ์ค์!
- ๋ ๊ฐ์ง ๋ชจ๋ ์์ ๋๊ณ ๊ฐ commit ๋์์ผ๋, ์ ๊ฐ ๋์คํฌ์ ์ถ๋ ฅ๋๊ธฐ ์ ์คํจ ๋ฐ์ ๊ฐ๋ฅ
- ์ด๋ฌํ ์คํจ๋ Lost updates๋ฅผ ์ด๋ โ (committed) ์ durability๊ฐ ์ค์!
- ์์ ์ค ํ๋๋ง ์ด๋ฃจ์ด์ง๊ณ ๋์คํฌ์ ์ถ๋ ฅ๋ ํ(์ฆ, ๊ฐ ์์ง uncommitted ์ํ) ์คํจ ๋ฐ์ ๊ฐ๋ฅ
- Recovery ์๊ณ ๋ฆฌ์ฆ์ ์คํจ์๋ ๋ถ๊ตฌํ๊ณ transaction์ atomicity์ durability๋ฅผ ๋ณด์ฅํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค consistency๋ฅผ ํ๋ณดํ๋ ๊ธฐ์
- ๋ณธ ์ฑํฐ์ ์ค์ ์ฌํญ
- Recovery ์๊ณ ๋ฆฌ์ฆ์ ๋ ๊ฐ์ง ํํธ
- ์ ์ transaction ์ฒ๋ฆฌ ์ค ์กฐ์น: ์คํจ๋ก๋ถํฐ ๋ณต๊ตฌํ๊ธฐ ์ํด ์ถฉ๋ถํ ์ ๋ณด๊ฐ ์กด์ฌํ๋๋ก ๋ณด์ฅ(Logging)
- ์คํจ ํ ์กฐ์น: Atomicity, consistency, durability๋ฅผ ๋ณด์ฅํ๋ ์ํ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ฉ ๋ณต๊ตฌ(Recovery)
Recovery and Atomicity
- ์คํจ์๋ ๋ถ๊ตฌํ๊ณ atomicity๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฒด๋ฅผ ์์ ํ๊ธฐ ์ ์ ์์ ์ฌํญ์ ์ค๋ช ํ๋ ์ ๋ณด๋ฅผ stable storage์ ์ถ๋ ฅ
- Log-based recovery ๋ฉ์ปค๋์ฆ์ ์์ธํ ํ์ต
- ๋จผ์ ํต์ฌ ๊ฐ๋ ์ ์
- ๊ทธ ํ ์ค์ Recovery ์๊ณ ๋ฆฌ์ฆ ์ ์
- ๋ ์ฌ์ฉ๋๋ ๋์: Shadow-copy ๋ฐ shadow-paging(๊ต์ฌ์ ๊ฐ๋ตํ ์ธ๋ถ ๋ด์ฉ ํฌํจ)
์๊ท๋ชจ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํ shadow-copy
Log-based Recovery
- Log๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์
๋ฐ์ดํธ ํ๋ ์ ๋ณด๋ฅผ ๋ด์ log record์ sequence
- Log๋ stable storage์ ์ ์ง
- Transaction ์์ ์, log records๋ฅผ ์์ฑํ์ฌ ๋ฑ๋ก
- ๊ฐ ๋ฅผ ์คํํ๊ธฐ ์ , log record ์์ฑ
- : ์ ์ ๊ฐ(์ด์ ๊ฐ)
- : ์ ์ฐ์ผ ๊ฐ(์๋ก์ด ๊ฐ)
- ์ฐ์ฐ์ ์ค์ ์คํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ๋ฐฉ์์ ๋ฐ๋ฆ
- ๊ฐ ๋ง์ง๋ง ๊ตฌ๋ฌธ์ ๋ง์น๋ฉด, log record ์์ฑ
- Transaction์ commit log record๊ฐ stable storage์ ์ถ๋ ฅ๋๋ฉด ํด๋น transaction์ด commit ๋์๋ค๊ณ ๊ฐ์ฃผ(ํด๋น transaction์ ์ด์ ๋ชจ๋ log record๊ฐ ์ด๋ฏธ ์ถ๋ ฅ๋์ด ์์ด์ผ ํจ)
- Transaction์ด ์ํํ Writes๋ transaction commit ์์ ์ ์ฌ์ ํ ๋ฒํผ์ ์์ ์ ์์ผ๋ฉฐ ๋์ค์ ์ถ๋ ฅ๋ ์ ์์.
- Log๋ฅผ ์ฌ์ฉํ๋ ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์
- Immediate database modification
- Deferred database modification
Database Modification Schemes
- Database modification์ ์๋ฏธ
- Private area์ ๋ก์ปฌ ๋ณ์๊ฐ ์๋, buffer block ๋๋ ๋์คํฌ์์์ ์ ๋ฐ์ดํธ ์ํ
- Immediate-modification scheme
- Transaction commit ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ํ์ฉ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ ์
๋ฐ์ดํธ log record ์์ฑ ํ์
- Log records๋ stable storage๋ก ์ง์ ์ถ๋ ฅ๋๋ค๊ณ ๊ฐ์
- (log record ์ถ๋ ฅ์ ์ด๋ ์ ๋ ์ฐ๊ธฐํ๋ ๋ฐฉ๋ฒ์ ๋์ค์ ํ์ธ)
- ์
๋ฐ์ดํธ๋ buffer blocks์ ๋์คํฌ ์ถ๋ ฅ์ transaction commit ์ ํ ์ธ์ ๋ ๋ฐ์ ๊ฐ๋ฅ
- ๋ธ๋ก์ด ์ถ๋ ฅ๋๋ ์์๋ ์ฐ์ฌ์ง ์์์ ๋ค๋ฅผ ์ ์์.
- Deferred-modification scheme
- Transaction commit ์์ ์๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ํ
- Recovery์ ์ผ๋ถ ์ธก๋ฉด ๋จ์ํ
- ํ์ง๋ง ์ ๋ฐ์ดํธ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์์ดํ ์ ๋ก์ปฌ ๋ณต์ฌ๋ณธ์ ์ ์ฅํด์ผ ํ๋ overhead๊ฐ ์กด์ฌ
Immediate Database Modification Example
| Log | Write | Output |
|---|---|---|
- ์ฐธ๊ณ : ๋ ๋ฅผ ํฌํจํ๋ ๋ธ๋ก์ ์๋ฏธ
Concurrency Control and Recovery
- ๋์ transactions ํ๊ฒฝ์์,
- ๋ชจ๋ transactions๋ ๋จ์ผ ๋์คํฌ ๋ฒํผ์ ๋จ์ผ ๋ก๊ทธ ๊ณต์
- ํ๋์ buffer block์ ํ๋ ์ด์์ transaction์ ์ํด ์ ๋ฐ์ดํธ๋ ๋ฐ์ดํฐ ์์ดํ ์ ๊ฐ์ง ์ ์์.
- ๊ฐ์ ์ฌํญ
- Transaction ๊ฐ ์์ดํ ์ ์์ ํ๋ค๋ฉด, ๊ฐ commit ๋๊ฑฐ๋ abort ๋ ๋๊น์ง ๋ค๋ฅธ transaction์ ํด๋น ์์ดํ ์์ ๋ถ๊ฐ
- ์ฆ, uncommitted transactions์ ์
๋ฐ์ดํธ๋ ๋ค๋ฅธ transactions์๊ฒ ๋ณด์ด์ง ์์์ผ ํจ
- ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ณต๊ตฌ ์ ๋ฌธ์ ๋ฐ์(์: ์ด ์ ๋ฐ์ดํธ โ ๊ฐ ์ ๋ฐ์ดํธ ๋ฐ commit โ ์ด abort ํด์ผ ํ๋ ๊ฒฝ์ฐ undo ์ํ ๋ฐฉ๋ฒ? - Recoverability issue)
- ์ ๋ฐ์ดํธ๋ ์์ดํ ์ ๋ํด X-locks๋ฅผ ํ๋ํ๊ณ transaction ์ข ๋ฃ ์๊น์ง ์ ์งํจ์ผ๋ก์จ ๋ณด์ฅ ๊ฐ๋ฅ(Strict two-phase locking)
- ๋ค๋ฅธ transactions์ log record๋ค์ด ๋ก๊ทธ ๋ด์ ์์ฌ ์์ ์ ์์.
Undo and Redo Operations
- Transactions์ undo์ redo
- : ์ ์ํด ์
๋ฐ์ดํธ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์์ดํ
์ ๊ฐ์ ์ด์ ๊ฐ์ผ๋ก ๋ณต๊ตฌ(์ ๋ง์ง๋ง log record๋ถํฐ ์ญ๋ฐฉํฅ ์งํ)
- ๋ฐ์ดํฐ ์์ดํ ๊ฐ ์ด์ ๊ฐ ๋ก ๋ณต๊ตฌ๋ ๋๋ง๋ค, ํน๋ณํ redo ์ ์ฉ log record ๊ฐ ์์ฑ๋จ(์ ๋ณต๊ตฌ๋ ์ด์ ์ ๊ฐ).
- ์ด redo ์ ์ฉ log records๋ undone ๋ transaction์ ๋ค์ redoํด์ผ ํ๋ ํน์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉ
- Transaction์ undo๊ฐ ์๋ฃ๋๋ฉด log record ์์ฑ
- : ์ ์ํด ์
๋ฐ์ดํธ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์์ดํ
์ ๊ฐ์ ์๋ก์ด ๊ฐ์ผ๋ก ์ค์ (์ ์ฒซ log record๋ถํฐ ์ ๋ฐฉํฅ ์งํ)
- ์ด ๊ฒฝ์ฐ ๋ณ๋์ logging ์ํํ์ง ์์.
Recovering from Failure
- ์คํจ ํ ๋ณต๊ตฌ ์
- Transaction ๋ฅผ undoํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ก๊ทธ ์ํ
- Record ํฌํจ
- ํ์ง๋ง record ๋๋ ๋ฏธํฌํจ
- Transaction ๋ฅผ redoํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ก๊ทธ ์ํ
- Record ํฌํจ
- ๊ทธ๋ฆฌ๊ณ record ๋๋ ํฌํจ
- Transaction ๋ฅผ undoํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ก๊ทธ ์ํ
- Transaction ๊ฐ ์ด์ ์ undo๋์๊ณ record๊ฐ ๋ก๊ทธ์ ์์ฑ๋ ํ ์คํจ๊ฐ ๋ฐ์ํ๋ค๊ณ ๊ฐ์
- ์คํจ ๋ณต๊ตฌ ์, transaction ๋ redo๋จ
- ์ ์ํด ์์ฑ๋ log records๋ฅผ redoํ๋ฉด ๊ฐ ์์ดํ ์ด ์๋ก์ด ๊ฐ์ผ๋ก ์ค์ (old โ new)
- ๊ทธ ํ, ์ด์ undo ์์ ์ ์ํด ์์ฑ๋ redo ์ ์ฉ log records๋ฅผ redoํ๋ฉด ๋ชจ๋ ์ ๋ฐ์ดํธ๋ ์์ดํ ์ด ๋ค์ ์ด์ ๊ฐ์ผ๋ก ์ค์ (new โ old)
- ์ด๋ฌํ redo๋ ์ด์ ๊ฐ์ ๋ณต๊ตฌํ๋ ๋จ๊ณ๋ฅผ ํฌํจํ์ฌ transaction ์ ๋ชจ๋ ์๋ ์์
์ ๋ค์ ์ํ
- Repeating history(์ด๋ ฅ ๋ฐ๋ณต)๋ก ์๋ ค์ง
- ๋ญ๋น์ฒ๋ผ ๋ณด์ผ ์ ์์ผ๋ recovery๋ฅผ ํฌ๊ฒ ๋จ์ํ
- ์คํจ ๋ณต๊ตฌ ์, transaction ๋ redo๋จ
Immediate DB Modification: Recovery Example
- ์๋๋ ์ธ ๊ฐ์ง ์์ ์์์ ๋ก๊ทธ ์ํ ํ์
| (a) | (b) | (c) |
|---|---|---|
- ๊ฐ ๊ฒฝ์ฐ์ Recovery ์กฐ์น
- (a) : ๋ ์ผ๋ก ๋ณต๊ตฌ๋ ํ ๋ ์ผ๋ก ๋ณต๊ตฌ, log record , , ์์ฑ
- (b) ๋ฐ : ์ ๋ ๊ณผ ์ผ๋ก ์ค์ ๋๊ณ , ๋ ์ผ๋ก ๋ณต๊ตฌ. log record ๋ฐ ์์ฑ
- (c) ๋ฐ : ์ ๋ ๊ฐ๊ฐ ๊ณผ ์ผ๋ก ์ค์ . ๊ทธ ํ ๋ ์ผ๋ก ์ค์
- Recovery ์กฐ์น๊ฐ ์ทจํด์ง๋ ๋์ค์๋ ์คํจ ๋ฐ์ ๊ฐ๋ฅ
- ์ ์ฐ์ฐ ๋ชจ๋ Idempotent(๋ฉฑ๋ฑ์ฑ)์ฌ์ผ ํจ
Checkpoints
- ๋ก๊ทธ์ ๊ธฐ๋ก๋ ๋ชจ๋ transactions๋ฅผ redo/undoํ๋ ๊ฒ์ ๋งค์ฐ ๋๋ฆด ์ ์์.
- ์์คํ ์ด ์ค๋ซ๋์ ์คํ๋์๋ค๋ฉด ์ ์ฒด ๋ก๊ทธ ์ฒ๋ฆฌ๋ ์๊ฐ ์์๊ฐ ํผ
- ์ด๋ฏธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ฐ์ดํธ๋ฅผ ์ถ๋ ฅํ transactions๋ฅผ ๋ถํ์ํ๊ฒ redoํ๊ฒ ๋ ์๋ ์์.
- ์ฃผ๊ธฐ์ ์ผ๋ก checkpointing์ ์ํํ์ฌ recovery ์ ์ฐจ ํจ์จํ
- ํ์ฌ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ชจ๋ log records๋ฅผ stable storage๋ก ์ถ๋ ฅ
- ๋ณ๊ฒฝ๋ ๋ชจ๋ buffer blocks๋ฅผ ๋์คํฌ๋ก ์ถ๋ ฅ
- stable storage์ log record ๊ธฐ๋ก(์ checkpoint ์์ ์ ํ์ฑ ์ํ์ธ ๋ชจ๋ transaction์ ๋ชฉ๋ก)
- Checkpointing ์ํ ์ค์๋ ๋ชจ๋ ์ ๋ฐ์ดํธ ์ค์ง
- Recovery ์, checkpoint ์ด์ ์ ์๋ฃ๋ transactions๋ ๊ณ ๋ คํ ํ์ ์๊ฒ ๋จ.
- Checkpoint ์ด์ ์ commit ๋๊ฑฐ๋ abort ๋ transactions๋ checkpoint ์ด์ ํน์ checkpointing ๊ณผ์ ์์ ์ด๋ฏธ ๋ชจ๋ ์ ๋ฐ์ดํธ๊ฐ stable storage๋ก ์ถ๋ ฅ๋์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ
- ๋ก๊ทธ์ ๋์์๋ถํฐ ์ญ๋ฐฉํฅ์ผ๋ก ์ค์บํ์ฌ ๊ฐ์ฅ ์ต๊ทผ์ record ํ์
- ์ ํฌํจ๋์ด ์๊ฑฐ๋ checkpoint ์ดํ์ ์์๋ transactions๋ง redo ๋๋ undo ๋์
- Undo ์์
์ ์ํด ๋ก๊ทธ์ ๋ ์ด์ ๋ถ๋ถ์ด ํ์ํ ์ ์์.
- ์ ์๋ ๋ชจ๋ transaction ์ ๋ํด record ๊ฐ ๋ฐ๊ฒฌ๋ ๋๊น์ง ์ญ๋ฐฉํฅ ์ค์บ ์ง์
- ์์์ ์ฐพ์ ๊ฐ์ฅ ๋น ๋ฅธ record ์ด์ ์ ๋ก๊ทธ ๋ถ๋ถ์ Recovery์ ํ์ํ์ง ์์ผ๋ฏ๋ก ์ํ ๋ ์ญ์ ๊ฐ๋ฅ
- ์์
- ๋ฌด์ ๊ฐ๋ฅ(Checkpoint๋ก ์ธํด ์ ๋ฐ์ดํธ๊ฐ ์ด๋ฏธ ๋์คํฌ์ ์ถ๋ ฅ๋จ)
- ๋ฐ redo
- undo
- ๋ณด๋ค ์ด์ ๋ก๊ทธ๋ ์ํ ๊ฒฝ์ฐ ๋ก๊ทธ์์ ์์ ํ๊ฒ ์ ๊ฑฐ ๊ฐ๋ฅ

Recovery Algorithm
- ์ง๊ธ๊น์ง ๋ณต๊ตฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ํต์ฌ ๊ฐ๋ ์ ๋ค๋ฃจ์์.
- ์ด์ , ๊ธฐ๋ณธ ๋ณต๊ตฌ ์๊ณ ๋ฆฌ์ฆ์ ์ธ๋ถ์ ์ธ ๊ตฌ์ฑ ์์๋ค์ ์ ์ํ๊ณ ์ ํจ.
- Logging(์ ์ ์๋ ์ค)
- Transaction ์์ ์
- ๊ฐ ์ ๋ฐ์ดํธ ์ , ๊ทธ๋ฆฌ๊ณ
- Transaction ์ข ๋ฃ ์
- Transaction rollback(์ ์ ์๋ ์ค)
- ๋กค๋ฐฑํ transaction์ ๋ผ๊ณ ๊ฐ์
- ๋ก๊ทธ๋ฅผ ๋์์๋ถํฐ ์ญ๋ฐฉํฅ ์ค์บ: ํํ์ ๊ฐ log record์ ๋ํด
- ์ ์ ์จ์ undo ์ํ,
- ํน๋ณํ redo ์ ์ฉ log record ์์ฑ
- ์ด๋ฌํ log records๋ compensation log records๋ผ๊ณ ๋ ๋ถ๋ฆผ
- Record ๋ฅผ ์ฐพ์ผ๋ฉด ์ค์บ์ ์ค์งํ๊ณ log record ์์ฑ
- Recovery from failure: ๋ ๋จ๊ณ(Two phases)
- Redo phase: Commit, abort ์ฌ๋ถ๋ ๋ฏธ์๋ฃ(imcomplete) ์ํ์ ์๊ด์์ด ๋ชจ๋ transactions์ ์ ๋ฐ์ดํธ replay
- Undo phase: ๋ชจ๋ ๋ฏธ์๋ฃ transactions๋ฅผ undo
- Redo phase
- ๋ง์ง๋ง records๋ฅผ ์ฐพ๊ณ undo-list๋ฅผ ๋ก ์ค์
- record ์์ชฝ๋ถํฐ ์ ๋ฐฉํฅ์ผ๋ก ์ค์บํ๋ฉฐ redo ์ํ ๋ฐ undo-list ๊ตฌ์ถ
- Record ๋๋ ๊ฐ ๋ฐ๊ฒฌ๋ ๋๋ง๋ค ์ ๋๋ ๋ฅผ ์จ์ redo
- Record ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ๋ฅผ undo-list์ ์ถ๊ฐ
- Record ๋๋ ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ๋ฅผ undo-list์์ ์ ๊ฑฐ
- Undo phase
- ๋ก๊ทธ๋ฅผ ๋์์๋ถํฐ ์ญ๋ฐฉํฅ ์ค์บํ๋ฉฐ undo-list์ ์๋ transactions๋ฅผ ๋กค๋ฐฑ
- ๊ฐ undo-list์ ์๋ ์ํ์์ log record ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด transaction rollback๊ณผ ๋์ผํ ์์
์ํ
- ์ ์ ์จ์ undo ์ํ
- Compensation log record ์์ฑ
- ๊ฐ undo-list์ ์๋ ์ํ์์ log record ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด,
- log record ์์ฑ
- ๋ฅผ undo-list์์ ์ ๊ฑฐ
- Undo-list๊ฐ ๋น๊ฒ ๋๋ฉด ์ค์ง
- ๊ฐ undo-list์ ์๋ ์ํ์์ log record ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด transaction rollback๊ณผ ๋์ผํ ์์
์ํ
- ๋ก๊ทธ๋ฅผ ๋์์๋ถํฐ ์ญ๋ฐฉํฅ ์ค์บํ๋ฉฐ undo-list์ ์๋ transactions๋ฅผ ๋กค๋ฐฑ
- Undo phase๊ฐ ์๋ฃ๋ ํ, ์ ์์ ์ธ transaction ์ฒ๋ฆฌ ์์ ๊ฐ๋ฅ
Example of Recovery

Buffer Management
Log Record buffering
- Log records๋ stable storage๋ก ์ง์ (directly) ์ถ๋ ฅ๋๋ ๋์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ๋ฒํผ๋ง๋จ
- ๋ฒํผ ๋ด์ log record ๋ธ๋ก์ด ๊ฝ ์ฐจ๊ฑฐ๋ log force ์ฐ์ฐ์ด ์คํ๋ ๋ log record๊ฐ stable storage๋ก ์ถ๋ ฅ
- Log force๋ transaction์ commitํ๊ธฐ ์ํด ๋ชจ๋ log record(commit record ํฌํจ)๋ฅผ stable storage๋ก ๊ฐ์ ์ถ๋ ฅํ๋ ์์
- ์ฌ๋ฌ log records๋ฅผ ๋จ์ผ ์ถ๋ ฅ ์ฐ์ฐ์ผ๋ก ๋ด๋ณด๋ผ ์ ์์ด I/O ๋น์ฉ ๊ฐ์
- Log record๊ฐ ๋ฒํผ๋ง๋ ๊ฒฝ์ฐ ์ค์ํด์ผ ํ ๊ท์น
- Log records๋ ์์ฑ๋ ์์๋๋ก stable storage์ ์ถ๋ ฅ
- ์ฐธ๊ณ : ๋ฐ์ดํฐ ๋ธ๋ก (๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒํผ) ์ถ๋ ฅ์ ์์๊ฐ ๋ฐ๋ ์ ์์.
- Transaction ๋ log record ์ด stable storage์ ์ถ๋ ฅ๋์์ ๋๋ง commit ์ํ๋ก ์ง์
- ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ ๋ธ๋ก์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ถ๋ ฅ๋๊ธฐ ์ , ํด๋น ๋ธ๋ก์ ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ๋ชจ๋ log record๊ฐ ๋ฐ๋์ stable storage์ ์ถ๋ ฅ๋์ด์ผ ํจ
- ์ด ๊ท์น์ Write-Ahead Logging ๋๋ WAL ๊ท์น์ด๋ผ ๋ถ๋ฆผ
Database Buffering
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ ๋ธ๋ก์ in-memory buffer ์ ์ง
- ์๋ก์ด ๋ธ๋ก์ด ํ์ํ ๋ ๋ฒํผ๊ฐ ๊ฝ ์ฐผ๋ค๋ฉด ๊ธฐ์กด ๋ธ๋ก์ ๋ฒํผ์์ ์ ๊ฑฐํด์ผ ํจ(์ฆ, replacement)
- ์ ๊ฑฐ ๋์์ผ๋ก ์ ํ๋ ๋ธ๋ก์ด ์ ๋ฐ์ดํธ๋์๋ค๋ฉด, ๋์คํฌ๋ก ์ถ๋ ฅ ํ์
- Recovery ์๊ณ ๋ฆฌ์ฆ์ no-force policy ์ง์
- Transaction commit ์ ์ ๋ฐ์ดํธ๋ ๋ธ๋ก์ ๋์คํฌ์ ์ธ ํ์ ์์.
- Force policy: Commit ์ ์
๋ฐ์ดํธ๋ ๋ธ๋ก write ์๊ตฌ
- ๋ ๋น์ผ commit ๋น์ฉ
- Recovery ์๊ณ ๋ฆฌ์ฆ์ steal policy ์ง์
- Uncommitted transactions์ ์ ๋ฐ์ดํธ๋ฅผ ํฌํจํ ๋ธ๋ก๋ transaction commit ์ ์ ๋์คํฌ์ ๊ธฐ๋ก ๊ฐ๋ฅ
- Uncommitted ์
๋ฐ์ดํธ๊ฐ ์๋ ๋ธ๋ก์ด ๋์คํฌ๋ก ์ถ๋ ฅ๋ ๊ฒฝ์ฐ, ํด๋น ์
๋ฐ์ดํธ์ undo ์ ๋ณด๋ฅผ ๋ด์ log record๊ฐ ๋จผ์ stable storage์ ๋ก๊ทธ์ ์ถ๋ ฅ๋์ด์ผ ํจ
- Write ahead logging
- ๋ธ๋ก์ด ๋์คํฌ๋ก ์ถ๋ ฅ๋ ๋ ํด๋น ๋ธ๋ก์ ๋ํ ์
๋ฐ์ดํธ๊ฐ ์งํ ์ค์ด์ด์๋ ์ ๋จ
- ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ฅ ๊ฐ๋ฅ
- ๋ฐ์ดํฐ ์์ดํ ์ writeํ๊ธฐ ์ , transaction์ ํด๋น ๋ฐ์ดํฐ ์์ดํ ์ ํฌํจํ๋ ๋ธ๋ก์ ๋ํด X-lock์ ํ๋
- Write๊ฐ ์๋ฃ๋๋ฉด lock ํด์ ๊ฐ๋ฅ
- ์ด๋ ๊ฒ ์งง์ ๊ธฐ๊ฐ ๋์ ์ ์ง๋๋ lock์ latches๋ผ๊ณ ์ง์นญ
- ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ฅ ๊ฐ๋ฅ
- ๋ธ๋ก์ ๋์คํฌ๋ก ์ถ๋ ฅํ๋ ๊ณผ์
- ๋ธ๋ก์ ์ ๋ฐ์ดํธ๊ฐ ์งํ ์ค์ด์ง ์์์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ธ๋ก์ ๋ํ exclusive latch๋ฅผ ๋จผ์ ํ๋
- Log flush ์ํ(Write-Ahead Logging์ ์ํด)
- ๋ธ๋ก์ ๋์คํฌ๋ก ์ถ๋ ฅ
- ๋ง์ง๋ง์ผ๋ก ๋ธ๋ก์ ๋ํ latch ํด์


