• Mindscape ๐Ÿ”ฅ
    • Playlist ๐ŸŽง
  • Ubuntu

    • Wine ํ™˜๊ฒฝ์—์„œ ์นด์นด์˜คํ†ก ์‹คํ–‰ ์‹œ explorer.exe ๋œจ์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๋ฒ•
    • Wine ์นด์นด์˜คํ†ก ์Šคํฌ๋ฆฐ์ƒท ๋ถ™์—ฌ๋„ฃ๊ธฐ ๋ฌธ์ œ ํ•ด๊ฒฐ (Wayland ํ™˜๊ฒฝ)
    • Wine ์นด์นด์˜คํ†ก ์ด๋ชจ์ง€ ๊นจ์ง ๋ฌธ์ œ ํ•ด๊ฒฐ
  • Wellness

    • ์ฐจ์ „์žํ”ผ (Psyllium Husk)
    • ์—‘์ŠคํŠธ๋ผ ๋ฒ„์ง„ ์˜ฌ๋ฆฌ๋ธŒ์œ  (Extra Virgin Olive Oil)
    • ์ž๊ฐ€๋น„๊ฐ•์„ธ์ฒ™ (Nasal Irrigation)
    • QCY HT08 (MeloBuds Pro Plus)
  • Humanities

    • Nordvik, Russia
    • North Sentinel Island
    • ๋กฑ๊ณ ๋กฑ๊ณ (Rongorongo)
  • ๐Ÿ—‚๏ธ Database System

    • 1. Introduction
    • 2. Relational Model
    • 3. SQL
    • 6. E-R Model
    • 7. Relational Database Design (1)
    • 7. Relational Database Design (2)
    • 13. Data Storage Structures
    • 14. Indexing
    • 15. Query Processing
    • 16. Query Optimization
    • 17. Transactions
    • 18. Concurrency Control
    • 19. Recovery System

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๋Š” ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ผ์‹œ์ ์œผ๋กœ ์ƒ์ฃผํ•˜๋Š” ๋ธ”๋ก
  • ๋””์Šคํฌ์™€ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ„์˜ ๋ธ”๋ก ์ด๋™์€ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์‹œ์ž‘
    • input(B)\text{input}(B)input(B): Physical block BBB๋ฅผ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ „์†ก
    • output(B)\text{output}(B)output(B): buffer block BBB๋ฅผ ๋””์Šคํฌ๋กœ ์ „์†กํ•˜๊ณ  ํ•ด๋‹น Physical block์„ ๊ต์ฒด
  • ๋‹จ์ˆœํ™”๋ฅผ ์œ„ํ•ด ๊ฐ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์€ ๋‹จ์ผ ๋ธ”๋ก ๋‚ด์— ์ ์žฌ ๋ฐ ์ €์žฅ๋œ๋‹ค๊ณ  ๊ฐ€์ •
  • ๊ฐ transaction TiT_iTiโ€‹๋Š” ์ ‘๊ทผ ๋ฐ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์˜ ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์„ ์œ ์ง€ํ•˜๋Š” private work-area ๋ณด์œ 
    • ๋ฐ์ดํ„ฐ ์•„์ดํ…œ XXX์— ๋Œ€ํ•œ TiT_iTiโ€‹์˜ ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์„ xix_ixiโ€‹๋ผ๊ณ  ์ง€์นญ

  • ์‹œ์Šคํ…œ buffer blocks์™€ private work-area ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ ์ „์†ก ์ˆ˜ํ–‰ ๋ฐฉ์‹
    • read(X)\text{read}(X)read(X): ๋ฐ์ดํ„ฐ ์•„์ดํ…œ XXX์˜ ๊ฐ’์„ ๋กœ์ปฌ ๋ณ€์ˆ˜ xix_ixiโ€‹์— ํ• ๋‹น
    • write(X)\text{write}(X)write(X): ๋กœ์ปฌ ๋ณ€์ˆ˜ xix_ixiโ€‹์˜ ๊ฐ’์„ buffer block ๋‚ด์˜ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ XXX์— ํ• ๋‹น
    • ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘, XXX๊ฐ€ ์ƒ์ฃผํ•˜๋Š” BXB_XBXโ€‹๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์—†๋‹ค๋ฉด ๋จผ์ € input(BX)\text{input}(B_X)input(BXโ€‹) ๋ฐœํ–‰
    • ์ฐธ๊ณ : output(BX)\text{output}(B_X)output(BXโ€‹)๊ฐ€ write(X)\text{write}(X)write(X) ์งํ›„์— ์ˆ˜ํ–‰๋  ํ•„์š”๋Š” ์—†์Œ. ์‹œ์Šคํ…œ์€ ์ ์ ˆํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋  ๋•Œ output ์—ฐ์‚ฐ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ
  • Transactions
    • XXX์— ์ฒ˜์Œ ์ ‘๊ทผํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ read(X)\text{read}(X)read(X) ์ˆ˜ํ–‰(์ดํ›„์˜ ์ฝ๊ธฐ๋Š” ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์—์„œ ๊ฐ€๋Šฅ)
    • write(X)\text{write}(X)write(X)๋Š” transaction์ด commit ๋˜๊ธฐ ์ „ ์–ธ์ œ๋“ ์ง€ ์‹คํ–‰ ๊ฐ€๋Šฅ

Recovery Algorithms

  • Transaction TiT_iTiโ€‹๊ฐ€ ๊ณ„์ขŒ AAA์—์„œ ๊ณ„์ขŒ BBB๋กœ 50๋‹ฌ๋Ÿฌ๋ฅผ ์ด์ฒดํ•œ๋‹ค๊ณ  ๊ฐ€์ •
    • ๋‘ ๊ฐ€์ง€ ์—…๋ฐ์ดํŠธ: AAA์—์„œ 50 ์ฐจ๊ฐ ๋ฐ BBB์— 50 ์ถ”๊ฐ€
  • Transaction TiT_iTiโ€‹๋Š” AAA์™€ BBB์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ถœ๋ ฅ๋˜๊ธฐ๋ฅผ ์š”๊ตฌ
    • ์ˆ˜์ • ์ค‘ ํ•˜๋‚˜๋งŒ ์ด๋ฃจ์–ด์ง€๊ณ  ๋””์Šคํฌ์— ์ถœ๋ ฅ๋œ ํ›„(์ฆ‰, TiT_iTiโ€‹๊ฐ€ ์•„์ง uncommitted ์ƒํƒœ) ์‹คํŒจ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
      • ์ด๋Ÿฌํ•œ ์‹คํŒจ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋น„์ผ๊ด€์ ์ธ ์ƒํƒœ๋กœ ๋งŒ๋“ฆ โ†’ (uncommitted) TiT_iTiโ€‹์˜ atomicity๊ฐ€ ์ค‘์š”!
    • ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ์ˆ˜์ •๋˜๊ณ  TiT_iTiโ€‹๊ฐ€ commit ๋˜์—ˆ์œผ๋‚˜, AAA์™€ BBB๊ฐ€ ๋””์Šคํฌ์— ์ถœ๋ ฅ๋˜๊ธฐ ์ „ ์‹คํŒจ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
      • ์ด๋Ÿฌํ•œ ์‹คํŒจ๋Š” Lost updates๋ฅผ ์ดˆ๋ž˜ โ†’ (committed) TiT_iTiโ€‹์˜ durability๊ฐ€ ์ค‘์š”!
  • Recovery ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์‹คํŒจ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  transaction์˜ atomicity์™€ durability๋ฅผ ๋ณด์žฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค consistency๋ฅผ ํ™•๋ณดํ•˜๋Š” ๊ธฐ์ˆ 
    • ๋ณธ ์ฑ•ํ„ฐ์˜ ์ค‘์  ์‚ฌํ•ญ
  • Recovery ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋‘ ๊ฐ€์ง€ ํŒŒํŠธ
    1. ์ •์ƒ transaction ์ฒ˜๋ฆฌ ์ค‘ ์กฐ์น˜: ์‹คํŒจ๋กœ๋ถ€ํ„ฐ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์ถฉ๋ถ„ํ•œ ์ •๋ณด๊ฐ€ ์กด์žฌํ•˜๋„๋ก ๋ณด์žฅ(Logging)
    2. ์‹คํŒจ ํ›„ ์กฐ์น˜: 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 TiT_iTiโ€‹ ์‹œ์ž‘ ์‹œ, <Tiย start><T_i~ \mathbf{start}><Tiโ€‹ย start> log records๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋“ฑ๋ก
  • TiT_iTiโ€‹๊ฐ€ write(X)\text{write}(X)write(X)๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „, <Ti,ย X,ย V1,ย V2><T_i,~ X,~ V_1,~ V_2><Tiโ€‹,ย X,ย V1โ€‹,ย V2โ€‹> log record ์ž‘์„ฑ
    • V1V_1V1โ€‹: write\text{write}write ์ „์˜ XXX ๊ฐ’(์ด์ „ ๊ฐ’)
    • V2V_2V2โ€‹: XXX์— ์“ฐ์ผ ๊ฐ’(์ƒˆ๋กœ์šด ๊ฐ’)
    • write(X)\text{write}(X)write(X) ์—ฐ์‚ฐ์˜ ์‹ค์ œ ์‹คํ–‰์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ˆ˜์ • ๋ฐฉ์‹์— ๋”ฐ๋ฆ„
  • TiT_iTiโ€‹๊ฐ€ ๋งˆ์ง€๋ง‰ ๊ตฌ๋ฌธ์„ ๋งˆ์น˜๋ฉด, log record <Tiย commit><T_i~ \mathbf{commit}><Tiโ€‹ย commit> ์ž‘์„ฑ
    • 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

LogWriteOutput
<T0ย start><T_0~ \mathbf{start}><T0โ€‹ย start>
<T0,ย A,ย 1000,ย 950><T_0,~ A,~ 1000,~ 950><T0โ€‹,ย A,ย 1000,ย 950>
A=950A = 950A=950
<T0,ย B,ย 2000,ย 2050><T_0,~ B,~ 2000,~ 2050><T0โ€‹,ย B,ย 2000,ย 2050>
B=2050B = 2050B=2050
<T0ย commit><T_0~ \mathbf{commit}><T0โ€‹ย commit>
<T1ย start><T_1~ \mathbf{start}><T1โ€‹ย start>
<T1,ย C,ย 700,ย 600><T_1,~ C,~ 700,~ 600><T1โ€‹,ย C,ย 700,ย 600>
C=600C = 600C=600
BB,ย BCB_B,~B_CBBโ€‹,ย BCโ€‹
<T1ย commit><T_1~ \mathbf{commit}><T1โ€‹ย commit>
BAB_ABAโ€‹
  • ์ฐธ๊ณ : BXB_XBXโ€‹๋Š” XXX๋ฅผ ํฌํ•จํ•˜๋Š” ๋ธ”๋ก์„ ์˜๋ฏธ

Concurrency Control and Recovery

  • ๋™์‹œ transactions ํ™˜๊ฒฝ์—์„œ,
    • ๋ชจ๋“  transactions๋Š” ๋‹จ์ผ ๋””์Šคํฌ ๋ฒ„ํผ์™€ ๋‹จ์ผ ๋กœ๊ทธ ๊ณต์œ 
    • ํ•˜๋‚˜์˜ buffer block์€ ํ•˜๋‚˜ ์ด์ƒ์˜ transaction์— ์˜ํ•ด ์—…๋ฐ์ดํŠธ๋œ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ.
  • ๊ฐ€์ • ์‚ฌํ•ญ
    • Transaction TiT_iTiโ€‹๊ฐ€ ์•„์ดํ…œ์„ ์ˆ˜์ •ํ–ˆ๋‹ค๋ฉด, TiT_iTiโ€‹๊ฐ€ commit ๋˜๊ฑฐ๋‚˜ abort ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ transaction์€ ํ•ด๋‹น ์•„์ดํ…œ ์ˆ˜์ • ๋ถˆ๊ฐ€
    • ์ฆ‰, uncommitted transactions์˜ ์—…๋ฐ์ดํŠธ๋Š” ๋‹ค๋ฅธ transactions์—๊ฒŒ ๋ณด์ด์ง€ ์•Š์•„์•ผ ํ•จ
      • ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋ณต๊ตฌ ์‹œ ๋ฌธ์ œ ๋ฐœ์ƒ(์˜ˆ: T1T_1T1โ€‹์ด AAA ์—…๋ฐ์ดํŠธ โ†’ T2T_2T2โ€‹๊ฐ€ AAA ์—…๋ฐ์ดํŠธ ๋ฐ commit โ†’ T1T_1T1โ€‹์ด abort ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ undo ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ•? - Recoverability issue)
    • ์—…๋ฐ์ดํŠธ๋œ ์•„์ดํ…œ์— ๋Œ€ํ•ด X-locks๋ฅผ ํš๋“ํ•˜๊ณ  transaction ์ข…๋ฃŒ ์‹œ๊นŒ์ง€ ์œ ์ง€ํ•จ์œผ๋กœ์จ ๋ณด์žฅ ๊ฐ€๋Šฅ(Strict two-phase locking)
  • ๋‹ค๋ฅธ transactions์˜ log record๋“ค์ด ๋กœ๊ทธ ๋‚ด์— ์„ž์—ฌ ์žˆ์„ ์ˆ˜ ์žˆ์Œ.

Undo and Redo Operations

  • Transactions์˜ undo์™€ redo
  • undo(Ti)\text{undo}(T_i)undo(Tiโ€‹): TiT_iTiโ€‹์— ์˜ํ•ด ์—…๋ฐ์ดํŠธ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์˜ ๊ฐ’์„ ์ด์ „ ๊ฐ’์œผ๋กœ ๋ณต๊ตฌ(TiT_iTiโ€‹์˜ ๋งˆ์ง€๋ง‰ log record๋ถ€ํ„ฐ ์—ญ๋ฐฉํ–ฅ ์ง„ํ–‰)
    • ๋ฐ์ดํ„ฐ ์•„์ดํ…œ XXX๊ฐ€ ์ด์ „ ๊ฐ’ VVV๋กœ ๋ณต๊ตฌ๋  ๋•Œ๋งˆ๋‹ค, ํŠน๋ณ„ํ•œ redo ์ „์šฉ log record <Ti,ย X,ย V><T_i,~ X,~ V><Tiโ€‹,ย X,ย V>๊ฐ€ ์ž‘์„ฑ๋จ(V=V1V=V_1V=V1โ€‹์€ ๋ณต๊ตฌ๋œ ์ด์ „์˜ ๊ฐ’).
    • ์ด redo ์ „์šฉ log records๋Š” undone ๋œ transaction์„ ๋‹ค์‹œ redoํ•ด์•ผ ํ•˜๋Š” ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ
    • Transaction์˜ undo๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด log record <Tiย abort><T_i~ \mathbf{abort}><Tiโ€‹ย abort> ์ž‘์„ฑ
  • redo(Ti)\text{redo}(T_i)redo(Tiโ€‹): TiT_iTiโ€‹์— ์˜ํ•ด ์—…๋ฐ์ดํŠธ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์˜ ๊ฐ’์„ ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ์„ค์ •(TiT_iTiโ€‹์˜ ์ฒซ log record๋ถ€ํ„ฐ ์ •๋ฐฉํ–ฅ ์ง„ํ–‰)
    • ์ด ๊ฒฝ์šฐ ๋ณ„๋„์˜ logging ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ.

Recovering from Failure

  • ์‹คํŒจ ํ›„ ๋ณต๊ตฌ ์‹œ
    • Transaction TiT_iTiโ€‹๋ฅผ undoํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋กœ๊ทธ ์ƒํƒœ
      • Record <Tiย start><T_i~ \mathbf{start}><Tiโ€‹ย start> ํฌํ•จ
      • ํ•˜์ง€๋งŒ record <Tiย commit><T_i~ \mathbf{commit}><Tiโ€‹ย commit> ๋˜๋Š” <Tiย abort><T_i~ \mathbf{abort}><Tiโ€‹ย abort> ๋ฏธํฌํ•จ
    • Transaction TiT_iTiโ€‹๋ฅผ redoํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋กœ๊ทธ ์ƒํƒœ
      • Record <Tiย start><T_i~ \mathbf{start}><Tiโ€‹ย start> ํฌํ•จ
      • ๊ทธ๋ฆฌ๊ณ  record <Tiย commit><T_i~ \mathbf{commit}><Tiโ€‹ย commit> ๋˜๋Š” <Tiย abort><T_i~ \mathbf{abort}><Tiโ€‹ย abort> ํฌํ•จ
  • Transaction TiT_iTiโ€‹๊ฐ€ ์ด์ „์— undo๋˜์—ˆ๊ณ  <Tiย abort><T_i~ \mathbf{abort}><Tiโ€‹ย abort> record๊ฐ€ ๋กœ๊ทธ์— ์ž‘์„ฑ๋œ ํ›„ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •
    • ์‹คํŒจ ๋ณต๊ตฌ ์‹œ, transaction TiT_iTiโ€‹๋Š” redo๋จ
      • TiT_iTiโ€‹์— ์˜ํ•ด ์ƒ์„ฑ๋œ log records๋ฅผ redoํ•˜๋ฉด ๊ฐ ์•„์ดํ…œ์ด ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ์„ค์ •(old โ†’ new)
      • ๊ทธ ํ›„, ์ด์ „ undo ์ž‘์—…์— ์˜ํ•ด ์ƒ์„ฑ๋œ redo ์ „์šฉ log records๋ฅผ redoํ•˜๋ฉด ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๋œ ์•„์ดํ…œ์ด ๋‹ค์‹œ ์ด์ „ ๊ฐ’์œผ๋กœ ์„ค์ •(new โ†’ old)
    • ์ด๋Ÿฌํ•œ redo๋Š” ์ด์ „ ๊ฐ’์„ ๋ณต๊ตฌํ–ˆ๋˜ ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•˜์—ฌ transaction TiT_iTiโ€‹์˜ ๋ชจ๋“  ์›๋ž˜ ์ž‘์—…์„ ๋‹ค์‹œ ์ˆ˜ํ–‰
      • Repeating history(์ด๋ ฅ ๋ฐ˜๋ณต)๋กœ ์•Œ๋ ค์ง
      • ๋‚ญ๋น„์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์œผ๋‚˜ recovery๋ฅผ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”

Immediate DB Modification: Recovery Example

  • ์•„๋ž˜๋Š” ์„ธ ๊ฐ€์ง€ ์‹œ์ ์—์„œ์˜ ๋กœ๊ทธ ์ƒํƒœ ํ‘œ์‹œ
(a)(b)(c)
<T0ย start><T_0~\mathbf{start}><T0โ€‹ย start><T0ย start><T_0~\mathbf{start}><T0โ€‹ย start><T0ย start><T_0~\mathbf{start}><T0โ€‹ย start>
<T0,ย A,ย 1000,ย 950><T_0,~A,~1000,~950><T0โ€‹,ย A,ย 1000,ย 950><T0,ย A,ย 1000,ย 950><T_0,~A,~1000,~950><T0โ€‹,ย A,ย 1000,ย 950><T0,ย A,ย 1000,ย 950><T_0,~A,~1000,~950><T0โ€‹,ย A,ย 1000,ย 950>
<T0,ย B,ย 2000,ย 2050><T_0,~B,~2000,~2050><T0โ€‹,ย B,ย 2000,ย 2050><T0,ย B,ย 2000,ย 2050><T_0,~B,~2000,~2050><T0โ€‹,ย B,ย 2000,ย 2050><T0,ย B,ย 2000,ย 2050><T_0,~B,~2000,~2050><T0โ€‹,ย B,ย 2000,ย 2050>
<T0ย commit><T_0~\mathbf{commit}><T0โ€‹ย commit><T0ย commit><T_0~\mathbf{commit}><T0โ€‹ย commit>
<T1ย start><T_1~\mathbf{start}><T1โ€‹ย start><T1ย start><T_1~\mathbf{start}><T1โ€‹ย start>
<T1,ย C,ย 700,ย 600><T_1,~C,~700,~600><T1โ€‹,ย C,ย 700,ย 600><T1,ย C,ย 700,ย 600><T_1,~C,~700,~600><T1โ€‹,ย C,ย 700,ย 600>
<T1ย commit><T_1~\mathbf{commit}><T1โ€‹ย commit>
  • ๊ฐ ๊ฒฝ์šฐ์˜ Recovery ์กฐ์น˜
    • (a) undo(T0)\text{undo}(T_0)undo(T0โ€‹): BBB๋Š” 200020002000์œผ๋กœ ๋ณต๊ตฌ๋œ ํ›„ AAA๋Š” 100010001000์œผ๋กœ ๋ณต๊ตฌ, log record <T0,ย B,ย 2000><T_0,~ B,~ 2000><T0โ€‹,ย B,ย 2000>, <T0,ย A,ย 1000><T_0,~ A,~ 1000><T0โ€‹,ย A,ย 1000>, <T0,ย abort><T_0,~ \mathbf{abort}><T0โ€‹,ย abort> ์ž‘์„ฑ
    • (b) redo(T0)\text{redo}(T_0)redo(T0โ€‹) ๋ฐ undo(T1)\text{undo}(T_1)undo(T1โ€‹): AAA์™€ BBB๋Š” 950950950๊ณผ 205020502050์œผ๋กœ ์„ค์ •๋˜๊ณ , CCC๋Š” 700700700์œผ๋กœ ๋ณต๊ตฌ. log record <T1,ย C,ย 700><T_1,~ C,~ 700><T1โ€‹,ย C,ย 700> ๋ฐ <T1,ย abort><T_1,~ \mathbf{abort}><T1โ€‹,ย abort> ์ž‘์„ฑ
    • (c) redo(T0)\text{redo}(T_0)redo(T0โ€‹) ๋ฐ redo(T1)\text{redo}(T_1)redo(T1โ€‹): AAA์™€ BBB๋Š” ๊ฐ๊ฐ 950950950๊ณผ 205020502050์œผ๋กœ ์„ค์ •. ๊ทธ ํ›„ CCC๋Š” 600600600์œผ๋กœ ์„ค์ •
  • Recovery ์กฐ์น˜๊ฐ€ ์ทจํ•ด์ง€๋Š” ๋„์ค‘์—๋„ ์‹คํŒจ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
    • redo()\text{redo}()redo()์™€ undo()\text{undo}()undo() ์—ฐ์‚ฐ ๋ชจ๋‘ Idempotent(๋ฉฑ๋“ฑ์„ฑ)์—ฌ์•ผ ํ•จ

Checkpoints

  • ๋กœ๊ทธ์— ๊ธฐ๋ก๋œ ๋ชจ๋“  transactions๋ฅผ redo/undoํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋А๋ฆด ์ˆ˜ ์žˆ์Œ.
    • ์‹œ์Šคํ…œ์ด ์˜ค๋žซ๋™์•ˆ ์‹คํ–‰๋˜์—ˆ๋‹ค๋ฉด ์ „์ฒด ๋กœ๊ทธ ์ฒ˜๋ฆฌ๋Š” ์‹œ๊ฐ„ ์†Œ์š”๊ฐ€ ํผ
    • ์ด๋ฏธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—…๋ฐ์ดํŠธ๋ฅผ ์ถœ๋ ฅํ•œ transactions๋ฅผ ๋ถˆํ•„์š”ํ•˜๊ฒŒ redoํ•˜๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ์Œ.
  • ์ฃผ๊ธฐ์ ์œผ๋กœ checkpointing์„ ์ˆ˜ํ–‰ํ•˜์—ฌ recovery ์ ˆ์ฐจ ํšจ์œจํ™”
    1. ํ˜„์žฌ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  log records๋ฅผ stable storage๋กœ ์ถœ๋ ฅ
    2. ๋ณ€๊ฒฝ๋œ ๋ชจ๋“  buffer blocks๋ฅผ ๋””์Šคํฌ๋กœ ์ถœ๋ ฅ
    3. stable storage์— log record <checkpointย L><\mathbf{checkpoint}~ L><checkpointย L> ๊ธฐ๋ก(LLL์€ checkpoint ์‹œ์ ์— ํ™œ์„ฑ ์ƒํƒœ์ธ ๋ชจ๋“  transaction์˜ ๋ชฉ๋ก)
    4. Checkpointing ์ˆ˜ํ–‰ ์ค‘์—๋Š” ๋ชจ๋“  ์—…๋ฐ์ดํŠธ ์ค‘์ง€
  • Recovery ์‹œ, checkpoint ์ด์ „์— ์™„๋ฃŒ๋œ transactions๋Š” ๊ณ ๋ คํ•  ํ•„์š” ์—†๊ฒŒ ๋จ.
    • Checkpoint ์ด์ „์— commit ๋˜๊ฑฐ๋‚˜ abort ๋œ transactions๋Š” checkpoint ์ด์ „ ํ˜น์€ checkpointing ๊ณผ์ •์—์„œ ์ด๋ฏธ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๊ฐ€ stable storage๋กœ ์ถœ๋ ฅ๋˜์—ˆ์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ
    • ๋กœ๊ทธ์˜ ๋์—์„œ๋ถ€ํ„ฐ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ์Šค์บ”ํ•˜์—ฌ ๊ฐ€์žฅ ์ตœ๊ทผ์˜ <checkpointย L><\mathbf{checkpoint}~ L><checkpointย L> record ํƒ์ƒ‰
    • LLL์— ํฌํ•จ๋˜์–ด ์žˆ๊ฑฐ๋‚˜ checkpoint ์ดํ›„์— ์‹œ์ž‘๋œ transactions๋งŒ redo ๋˜๋Š” undo ๋Œ€์ƒ
  • Undo ์ž‘์—…์„ ์œ„ํ•ด ๋กœ๊ทธ์˜ ๋” ์ด์ „ ๋ถ€๋ถ„์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ.
    • LLL์— ์žˆ๋Š” ๋ชจ๋“  transaction TiT_iTiโ€‹์— ๋Œ€ํ•ด record <Tiย start><T_i~ \mathbf{start}><Tiโ€‹ย start>๊ฐ€ ๋ฐœ๊ฒฌ๋  ๋•Œ๊นŒ์ง€ ์—ญ๋ฐฉํ–ฅ ์Šค์บ” ์ง€์†
    • ์œ„์—์„œ ์ฐพ์€ ๊ฐ€์žฅ ๋น ๋ฅธ <Tiย start><T_i~ \mathbf{start}><Tiโ€‹ย start> record ์ด์ „์˜ ๋กœ๊ทธ ๋ถ€๋ถ„์€ Recovery์— ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์›ํ•  ๋•Œ ์‚ญ์ œ ๊ฐ€๋Šฅ
  • ์˜ˆ์‹œ
    • T1T_1T1โ€‹ ๋ฌด์‹œ ๊ฐ€๋Šฅ(Checkpoint๋กœ ์ธํ•ด ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ฏธ ๋””์Šคํฌ์— ์ถœ๋ ฅ๋จ)
    • T2T_2T2โ€‹ ๋ฐ T3T_3T3โ€‹ redo
    • T4T_4T4โ€‹ undo
    • <T2ย start><T_2~ \mathbf{start}><T2โ€‹ย start>๋ณด๋‹ค ์ด์ „ ๋กœ๊ทธ๋Š” ์›ํ•  ๊ฒฝ์šฐ ๋กœ๊ทธ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์ œ๊ฑฐ ๊ฐ€๋Šฅ

Recovery Algorithm

  • ์ง€๊ธˆ๊นŒ์ง€ ๋ณต๊ตฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ํ•ต์‹ฌ ๊ฐœ๋…์„ ๋‹ค๋ฃจ์—ˆ์Œ.
  • ์ด์ œ, ๊ธฐ๋ณธ ๋ณต๊ตฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ธ๋ถ€์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์„ ์ œ์‹œํ•˜๊ณ ์ž ํ•จ.
  • Logging(์ •์ƒ ์ž‘๋™ ์ค‘)
    • Transaction ์‹œ์ž‘ ์‹œ <Tiย start><T_i~ \mathbf{start}><Tiโ€‹ย start>
    • ๊ฐ ์—…๋ฐ์ดํŠธ ์‹œ <Ti,ย Xj,ย V1,ย V2><T_i,~ X_j,~ V_1,~ V_2><Tiโ€‹,ย Xjโ€‹,ย V1โ€‹,ย V2โ€‹>, ๊ทธ๋ฆฌ๊ณ 
    • Transaction ์ข…๋ฃŒ ์‹œ <Tiย commit><T_i~ \mathbf{commit}><Tiโ€‹ย commit>
  • Transaction rollback(์ •์ƒ ์ž‘๋™ ์ค‘)
    • ๋กค๋ฐฑํ•  transaction์„ TiT_iTiโ€‹๋ผ๊ณ  ๊ฐ€์ •
    • ๋กœ๊ทธ๋ฅผ ๋์—์„œ๋ถ€ํ„ฐ ์—ญ๋ฐฉํ–ฅ ์Šค์บ”: <Ti,ย Xj,ย V1,ย V2><T_i,~ X_j,~ V_1,~ V_2><Tiโ€‹,ย Xjโ€‹,ย V1โ€‹,ย V2โ€‹> ํ˜•ํƒœ์˜ ๊ฐ TiT_iTiโ€‹ log record์— ๋Œ€ํ•ด
      • XjX_jXjโ€‹์— V1V_1V1โ€‹์„ ์จ์„œ undo ์ˆ˜ํ–‰,
      • ํŠน๋ณ„ํ•œ redo ์ „์šฉ log record <Ti,ย Xj,ย V1><T_i,~ X_j,~ V_1><Tiโ€‹,ย Xjโ€‹,ย V1โ€‹> ์ž‘์„ฑ
        • ์ด๋Ÿฌํ•œ log records๋Š” compensation log records๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ
    • Record <Tiย start><T_i~ \mathbf{start}><Tiโ€‹ย start>๋ฅผ ์ฐพ์œผ๋ฉด ์Šค์บ”์„ ์ค‘์ง€ํ•˜๊ณ  log record <Tiย abort><T_i~ \mathbf{abort}><Tiโ€‹ย abort> ์ž‘์„ฑ
  • Recovery from failure: ๋‘ ๋‹จ๊ณ„(Two phases)
    • Redo phase: Commit, abort ์—ฌ๋ถ€๋‚˜ ๋ฏธ์™„๋ฃŒ(imcomplete) ์ƒํƒœ์— ์ƒ๊ด€์—†์ด ๋ชจ๋“  transactions์˜ ์—…๋ฐ์ดํŠธ replay
    • Undo phase: ๋ชจ๋“  ๋ฏธ์™„๋ฃŒ transactions๋ฅผ undo
  • Redo phase
    1. ๋งˆ์ง€๋ง‰ <checkpointย L><\mathbf{checkpoint}~ L><checkpointย L> records๋ฅผ ์ฐพ๊ณ  undo-list๋ฅผ LLL๋กœ ์„ค์ •
    2. <checkpointย L><\mathbf{checkpoint}~ L><checkpointย L> record ์œ„์ชฝ๋ถ€ํ„ฐ ์ •๋ฐฉํ–ฅ์œผ๋กœ ์Šค์บ”ํ•˜๋ฉฐ redo ์ˆ˜ํ–‰ ๋ฐ undo-list ๊ตฌ์ถ•
      1. Record <Ti,ย Xj,ย V1,ย V2><T_i,~ X_j,~ V_1,~ V_2><Tiโ€‹,ย Xjโ€‹,ย V1โ€‹,ย V2โ€‹> ๋˜๋Š” <Ti,ย Xj,ย V><T_i,~ X_j,~ V><Tiโ€‹,ย Xjโ€‹,ย V>๊ฐ€ ๋ฐœ๊ฒฌ๋  ๋•Œ๋งˆ๋‹ค XjX_jXjโ€‹์— V2V_2V2โ€‹ ๋˜๋Š” VVV๋ฅผ ์จ์„œ redo
      2. Record <Tiย start><T_i~ \mathbf{start}><Tiโ€‹ย start>๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด TiT_iTiโ€‹๋ฅผ undo-list์— ์ถ”๊ฐ€
      3. Record <Tiย commit><T_i~ \mathbf{commit}><Tiโ€‹ย commit> ๋˜๋Š” <Tiย abort><T_i~ \mathbf{abort}><Tiโ€‹ย abort>๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด TiT_iTiโ€‹๋ฅผ undo-list์—์„œ ์ œ๊ฑฐ
  • Undo phase
    • ๋กœ๊ทธ๋ฅผ ๋์—์„œ๋ถ€ํ„ฐ ์—ญ๋ฐฉํ–ฅ ์Šค์บ”ํ•˜๋ฉฐ undo-list์— ์žˆ๋Š” transactions๋ฅผ ๋กค๋ฐฑ
      1. TiT_iTiโ€‹๊ฐ€ undo-list์— ์žˆ๋Š” ์ƒํƒœ์—์„œ log record <Ti,ย Xj,ย V1,ย V2><T_i,~ X_j,~ V_1,~ V_2><Tiโ€‹,ย Xjโ€‹,ย V1โ€‹,ย V2โ€‹>๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด transaction rollback๊ณผ ๋™์ผํ•œ ์ž‘์—… ์ˆ˜ํ–‰
        1. XjX_jXjโ€‹์— V1V_1V1โ€‹์„ ์จ์„œ undo ์ˆ˜ํ–‰
        2. Compensation log record <Ti,ย Xj,ย V1><T_i,~ X_j,~ V_1><Tiโ€‹,ย Xjโ€‹,ย V1โ€‹> ์ž‘์„ฑ
      2. TiT_iTiโ€‹๊ฐ€ undo-list์— ์žˆ๋Š” ์ƒํƒœ์—์„œ log record <Tiย start><T_i~ \mathbf{start}><Tiโ€‹ย start>๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด,
        1. log record <Tiย abort><T_i~ \mathbf{abort}><Tiโ€‹ย abort> ์ž‘์„ฑ
        2. TiT_iTiโ€‹๋ฅผ undo-list์—์„œ ์ œ๊ฑฐ
      3. Undo-list๊ฐ€ ๋น„๊ฒŒ ๋˜๋ฉด ์ค‘์ง€
  • 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 TiT_iTiโ€‹๋Š” log record <Tiย commit><T_i~ \mathbf{commit}><Tiโ€‹ย commit>์ด 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๋ผ๊ณ  ์ง€์นญ
  • ๋ธ”๋ก์„ ๋””์Šคํฌ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ณผ์ •
    1. ๋ธ”๋ก์— ์—…๋ฐ์ดํŠธ๊ฐ€ ์ง„ํ–‰ ์ค‘์ด์ง€ ์•Š์Œ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ธ”๋ก์— ๋Œ€ํ•œ exclusive latch๋ฅผ ๋จผ์ € ํš๋“
    2. Log flush ์ˆ˜ํ–‰(Write-Ahead Logging์„ ์œ„ํ•ด)
    3. ๋ธ”๋ก์„ ๋””์Šคํฌ๋กœ ์ถœ๋ ฅ
    4. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ธ”๋ก์— ๋Œ€ํ•œ latch ํ•ด์ œ
์ตœ๊ทผ ์ˆ˜์ •: 26. 1. 3. ์˜คํ›„ 9:57
Contributors: kmbzn
Prev
18. Concurrency Control

BUILT WITH

CloudflareNode.jsGitHubGitVue.jsJavaScriptVSCodenpm

All trademarks and logos are property of their respective owners.
ยฉ 2026 kmbzn ยท MIT License