• 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

18. Concurrency Control

Overview

Concurrency Control(๋™์‹œ์„ฑ ์ œ์–ด): ์ถฉ๋Œํ•˜๋Š” ๋ช…๋ น ๊ฐ„์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ, ๋™์‹œ์„ฑ ๋ ˆ๋ฒจ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ๋†’๊ฒŒ ๋งŒ๋“œ๋Š” ์Šค์ผ€์ค„ ์ƒ์„ฑ alt text

Lock-based Protocols

  • Lock: ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์— ๋Œ€ํ•œ ๋™์‹œ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜
  • ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์€ ๋‘ ๊ฐ€์ง€ ๋ชจ๋“œ๋กœ ์ž ๊ธธ ์ˆ˜ ์žˆ์Œ.
    1. eXclusive (X) mode: ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์„ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์Œ.
    • lock-X ๋ฐ unlock ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ X-lock์„ ์š”์ฒญํ•˜๊ณ  ํ•ด์ œ
    1. Shared (S) mode: ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์„ ์ฝ์„ ์ˆ˜๋งŒ ์žˆ์Œ.
    • lock-S ๋ฐ unlock ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ S-lock์„ ์š”์ฒญํ•˜๊ณ  ํ•ด์ œ
  • ๋ชจ๋“  transaction์€ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ Q์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•  operation ์œ ํ˜•์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋ชจ๋“œ๋กœ lock์„ ์š”์ฒญ
    • Lock ์š”์ฒญ์€ Concurrency-Control Manager๋กœ ์ „๋‹ฌ
    • Lock ์š”์ฒญ์ด ์Šน์ธ๋œ ํ›„์—๋งŒ transaction์ด ์ง„ํ–‰ ๊ฐ€๋Šฅ
  • ์š”์ฒญ๋œ lock์ด ํ•ด๋‹น ์•„์ดํ…œ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ transaction์ด ์ด๋ฏธ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” lock๊ณผ compatibleํ•˜๋ฉด transaction์€ lock์„ ๋ถ€์—ฌ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ.
  • S-lock: ์ž„์˜์˜ ์ˆ˜์˜ transaction์ด ์•„์ดํ…œ์— ๋Œ€ํ•ด ๋ณด์œ  ๊ฐ€๋Šฅ
  • X-lock: ํ•œ transaction์ด X-lock์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๋‹ค๋ฅธ transaction์€ ํ•ด๋‹น ์•„์ดํ…œ์— ๋Œ€ํ•ด ์–ด๋– ํ•œ lock๋„ ๋ณด์œ ํ•  ์ˆ˜ ์—†์Œ.
SX
Struefalse
Xfalsetrue

Lock compatibility Matrix

Schedule with Lock Grants

  • ๋‚˜๋จธ์ง€ ์žฅ์—์„œ๋Š” grant ์ƒ๋žต
  • Lock ์š”์ฒญ ๋ฐ”๋กœ ๋‹ค์Œ์— ์˜ค๋Š” ๋‹ค์Œ ๋ช…๋ น ์ง์ „์— grant๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๊ฐ€์ •
  • ์ด ์Šค์ผ€์ค„์€ serializableํ•˜์ง€ ์•Š์Œ.
    • Lock์„ ๋‹จ์ˆœํžˆ ํš๋“/ํ•ด์ œํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” Transaction isolation serializability์„ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•จ.
T1T_1T1โ€‹T2T_2T2โ€‹Concurrency-Control manager
lock-X(B)\text{lock-X}(B)lock-X(B)grant-X(B,ย T1)\text{grant-X}(B,~T_1)grant-X(B,ย T1โ€‹)
read(B)\text{read}(B)read(B)
B:=Bโˆ’50B:=B-50B:=Bโˆ’50
write(B)\text{write}(B)write(B)
unlock(B)\text{unlock}(B)unlock(B)
lock-S(A)\text{lock-S}(A)lock-S(A)
grant-S(A,ย T2)\text{grant-S}(A,~T_2)grant-S(A,ย T2โ€‹)
read(A)\text{read}(A)read(A)
unlock(A)\text{unlock}(A)unlock(A)
lock-S(B)\text{lock-S}(B)lock-S(B)
grant-S(B,ย T2)\text{grant-S}(B,~T_2)grant-S(B,ย T2โ€‹)
read(B)\text{read}(B)read(B)
unlock(B)\text{unlock}(B)unlock(B)
display(A+BA+BA+B)
lock-X(A)\text{lock-X}(A)lock-X(A)
grant-X(A,ย T1)\text{grant-X}(A,~T_1)grant-X(A,ย T1โ€‹)
read(A)\text{read}(A)read(A)
A:=A+50A:=A+50A:=A+50
write(A)\text{write}(A)write(A)
unlock(A)\text{unlock}(A)unlock(A)

Locking Protocols

  • Locking Protocol: ๋ชจ๋“  transaction์ด lock์„ ์š”์ฒญํ•˜๊ณ  ํ•ด์ œํ•  ๋•Œ ๋”ฐ๋ฅด๋Š” ๊ทœ์น™์˜ ์ง‘ํ•ฉ
  • ๊ฐ€๋Šฅํ•œ ์Šค์ผ€์ค„ ์ง‘ํ•ฉ์„ ์ œํ•œํ•˜์—ฌ ์ง๋ ฌ์„ฑ์„ ๊ฐ•์ œ
  • ์ฃผ์–ด์ง„ locking Protocol ํ•˜์—์„œ,
    • ์Šค์ผ€์ค„ S๋Š” ํ•ด๋‹น Protocol์„ ๋”ฐ๋ฅด๋Š” transaction ์ง‘ํ•ฉ์— ์˜ํ•ด ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น Protocol ํ•˜์—์„œ legal
    • Protocol์€ ํ•ด๋‹น Protocol ํ•˜์˜ ๋ชจ๋“  legal ์Šค์ผ€์ค„์ด serialiazableํ•˜๋‹ค๋ฉด ์ง๋ ฌ์„ฑ์„ ๋ณด์žฅ

Deadlock and Starvation

  • ๋ถ€๋ถ„ ์Šค์ผ€์ค„(Partial Schedule)์„ ๊ณ ๋ คํ–ˆ์„ ๋•Œ
    • T3T_3T3โ€‹์™€ T4T_4T4โ€‹ ๋ชจ๋‘ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†์Œ.
    • lock-S(B)\text{lock-S}(B)lock-S(B) ์‹คํ–‰์€ T4T_4T4โ€‹๊ฐ€ T3T_3T3โ€‹๊ฐ€ B์— ๋Œ€ํ•œ X-lock์„ ํ•ด์ œํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•˜๊ณ , lock-X(A) ์‹คํ–‰์€ T3T_3T3โ€‹๊ฐ€ T4T_4T4โ€‹๊ฐ€ A์— ๋Œ€ํ•œ S-lock์„ ํ•ด์ œํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•จ.
  • ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ Deadlock์ด๋ผ๊ณ  ํ•จ.
  • Deadlock์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด T3T_3T3โ€‹ ๋˜๋Š” T4T_4T4โ€‹ ์ค‘ ํ•˜๋‚˜๊ฐ€ rollback๋˜์–ด์•ผ ํ•˜๊ณ  lock์ด ํ•ด์ œ๋˜์–ด์•ผ ํ•จ.
  • Deadlock์˜ ์ž ์žฌ์„ฑ์€ ๋Œ€๋ถ€๋ถ„์˜ locking protocol์— ์กด์žฌํ•˜๋ฉฐ, ์ด๋Š” ํ•„์š”์•…
  • Starvation ๋˜ํ•œ concurrency control manager๊ฐ€ ์ž˜๋ชป ์„ค๊ณ„๋˜๋ฉด ๋ฐœ์ƒ ๊ฐ€๋Šฅ
    • Case 1: ํ•œ transaction์ด ์•„์ดํ…œ์— ๋Œ€ํ•œ X-lock์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ, ๋‹ค๋ฅธ transaction๋“ค์˜ ์—ฐ์†์ ์ธ S-lock ์š”์ฒญ์ด ์Šน์ธ๋˜๋Š” ๊ฒฝ์šฐ
    • Case 2: ๋™์ผํ•œ transaction์ด deadlock์œผ๋กœ ์ธํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ rollback๋˜๋Š” ๊ฒฝ์šฐ
  • Concurrency control manager๋Š” starvation์„ ๋ฐฉ์ง€ํ•˜๋„๋ก ์„ค๊ณ„๋  ์ˆ˜ ์žˆ์Œ.
T3T_3T3โ€‹T4T_4T4โ€‹
lock-X(B)\text{lock-X}(B)lock-X(B)
read(B)\text{read}(B)read(B)
B:=Bโˆ’50B:=B-50B:=Bโˆ’50
write(B)\text{write}(B)write(B)
lock-S(A)\text{lock-S}(A)lock-S(A)
read(A)\text{read}(A)read(A)
lock-S(B)\text{lock-S}(B)lock-S(B)
lock-X(A)\text{lock-X}(A)lock-X(A)

Two-Phase Locking (2PL) Protocol

  • Conflict-Serializable ์Šค์ผ€์ค„์„ ๋ณด์žฅํ•˜๋Š” protocol
  • ๊ฐ transaction์€ lock ์š”์ฒญ๊ณผ ํ•ด์ œ๋ฅผ ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด ์‹คํ–‰ํ•ด์•ผ ํ•จ.

  • ๋‹จ๊ณ„ 1: Growing ๋‹จ๊ณ„
    • Transaction์€ lock์„ ํš๋“ํ•  ์ˆ˜ ์žˆ์Œ.
    • Transaction์€ lock์„ ํ•ด์ œํ•  ์ˆ˜ ์—†์Œ.
  • ๋‹จ๊ณ„ 2: Shrinking ๋‹จ๊ณ„
    • Transaction์€ lock์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Œ.
    • Transaction์€ lock์„ ํš๋“ํ•  ์ˆ˜ ์—†์Œ.
  • ์ด Protocol์€ ์ง๋ ฌ์„ฑ์„ ๋ณด์žฅ
    • Transaction๋“ค์€ lock Point(์ตœ์ข… lock์„ ํš๋“ํ•œ ์‹œ์ ) ์ˆœ์„œ๋กœ serialize๋  ์ˆ˜ ์žˆ์Œ์ด ์ฆ๋ช… ๊ฐ€๋Šฅ
  • Two-Phase locking์€ ์ง๋ ฌ์„ฑ์„ ์œ„ํ•œ ํ•„์ˆ˜ ์กฐ๊ฑด์€ ์•„๋‹˜
    • 2PL์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” conflict Serializable ์Šค์ผ€์ค„์ด ์žˆ์Œ.
  • ๊ทธ๋Ÿฌ๋‚˜ Data ์ ‘๊ทผ ์ˆœ์„œ์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, Two-Phase locking์€ ์ถฉ๋Œ ์ง๋ ฌ์„ฑ์— ํ•„์š”
  • ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด, 2PL ์ด์™ธ์˜ ๋‹ค๋ฅธ locking Protocol์„ ๊ณ ์•ˆํ•  ์ˆ˜ ์žˆ์Œ.
  • Two-Phase locking์€ deadlock์œผ๋กœ๋ถ€ํ„ฐ์˜ ์ž์œ ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ.
  • Cascading roll-back์ด ์—†๋Š” recoverability๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ 2PL์— ํ™•์žฅ์ด ํ•„์š”ํ•จ.
    • Strict Two-Phase locking: Transaction์€ commit ๋˜๋Š” abortํ•  ๋•Œ๊นŒ์ง€ ๋ชจ๋“  X-lock์„ ๋ณด์œ ํ•ด์•ผ ํ•จ.
      • Recoverability๋ฅผ ๋ณด์žฅํ•˜๊ณ  cascading roll-back์„ ๋ฐฉ์ง€
    • Rigorous Two-Phase locking: Transaction์€ commit ๋˜๋Š” abortํ•  ๋•Œ๊นŒ์ง€ ๋ชจ๋“  lock์„ ๋ณด์œ ํ•ด์•ผ ํ•จ.
      • Transaction์€ commit ์ˆœ์„œ๋กœ serialize๋  ์ˆ˜ ์žˆ์Œ.
  • Lock conversions
    • T1T_1T1โ€‹: read(a1),ย read(a2),ย โ€ฆ,ย read(an),ย write(a1)\text{read}(a_1),~\text{read}(a_2),~\dots,~\text{read}(a_n),~\text{write}(a_1)read(a1โ€‹),ย read(a2โ€‹),ย โ€ฆ,ย read(anโ€‹),ย write(a1โ€‹)
    • T2T_2T2โ€‹: read(a1),ย read(a2),ย โ€ฆ,ย display(a1+a2)\text{read}(a_1),~\text{read}(a_2),~\dots,~\text{display}(a_1+a_2)read(a1โ€‹),ย read(a2โ€‹),ย โ€ฆ,ย display(a1โ€‹+a2โ€‹)
    • T1T_1T1โ€‹์€ a1a_1a1โ€‹์— ๋Œ€ํ•œ X-lock์„ ํš๋“ํ•ด์•ผ ํ•จ.
      • T1T_1T1โ€‹์ด T2T_2T2โ€‹๋ณด๋‹ค ๋จผ์ € ์‹œ์ž‘ํ•˜๋ฉด, T1T_1T1โ€‹๊ณผ T2T_2T2โ€‹์˜ ๋ชจ๋“  ๋™์‹œ ์‹คํ–‰์€ ์ง๋ ฌ ์‹คํ–‰๊ณผ ๊ฐ™์Œ.
      • ๊ทธ๋Ÿฌ๋‚˜ T1T_1T1โ€‹์€ ์ตœ์ข… ์‹คํ–‰์—์„œ๋งŒ X-lock์ด ํ•„์š”
    • T1T_1T1โ€‹์ด ๋จผ์ € S-lock์„ ํš๋“ํ•˜๊ณ  ๋‚˜์ค‘์— lock์„ X-lock์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด, T1T_1T1โ€‹๊ณผ T2T_2T2โ€‹๊ฐ€ a1a_1a1โ€‹๊ณผ a2a_2a2โ€‹์— ๋™์‹œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋” ๋†’์€ ๋™์‹œ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ.
    • Lock upgrade: S-lock์„ X-lock์œผ๋กœ ๋ณ€ํ™˜
    • Lock Downgrade: X-lock์„ S-lock์œผ๋กœ ๋ณ€ํ™˜
  • Lock conversion์„ ํฌํ•จํ•œ Two-Phase locking Protocol
    • Growing Phase
      • ์•„์ดํ…œ์— ๋Œ€ํ•œ S-lock ํš๋“
      • ์•„์ดํ…œ์— ๋Œ€ํ•œ X-lock ํš๋“
      • S-lock์„ X-lock์œผ๋กœ ๋ณ€ํ™˜ (Upgrade)
    • Shrinking Phase
      • S-lock ํ•ด์ œ
      • X-lock ํ•ด์ œ
      • X-lock์„ S-lock์œผ๋กœ ๋ณ€ํ™˜ (Downgrade)
  • ์ด Protocol์€ ์ง๋ ฌ์„ฑ์„ ๋ณด์žฅ
  • Strict Two-Phase locking ๋ฐ rigorous Two-Phase locking (Lock conversion ํฌํ•จ)์€ ์ƒ์šฉ Database ์‹œ์Šคํ…œ์—์„œ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋‹จ์ˆœํžˆ Two-Phase locking์œผ๋กœ ์ง€์นญ๋˜๊ธฐ๋„ ํ•จ.

Automatic Acquisition of Locks

  • Transaction TiT_iTiโ€‹๋Š” ๋ช…์‹œ์ ์ธ locking ํ˜ธ์ถœ ์—†์ด ํ‘œ์ค€ read/write ๋ช…๋ น์„ ์‹คํ–‰
  • operation read(D) ์ฒ˜๋ฆฌ ๋ฐฉ์‹
if Ti has a lock on D then read(D);
else begin
    if necessary wait until no other transaction has a X-lock on D;
    grant Ti a S-lock on D;
    read(D);
end
  • operation write(D) ์ฒ˜๋ฆฌ ๋ฐฉ์‹
if Ti has a X-lock on D then write(D);
else begin
    if necessary wait until no other transaction has any lock on D;
    if Ti has a S-lock on D then
        upgrade lock on D to X-lock;
    else grant Ti a X-lock on D;
    write(D);
end
  • ๋ชจ๋“  lock์€ commit ๋˜๋Š” abort ํ›„์— ํ•ด์ œ (Rigorous 2PL ์‚ฌ์šฉ)

Implementation of Locking

  • Lock manager๋Š” ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ์Œ.
  • Transaction์€ lock ๋ฐ unlock ์š”์ฒญ์„ lock Manager์—๊ฒŒ ๋ฉ”์‹œ์ง€๋กœ ๋ณด๋ƒ„
  • Lock manager๋Š” lock Grant ๋ฉ”์‹œ์ง€(๋˜๋Š” Deadlock์˜ ๊ฒฝ์šฐ transaction์—๊ฒŒ rollback์„ ์š”์ฒญํ•˜๋Š” ๋ฉ”์‹œ์ง€)๋ฅผ ๋ณด๋‚ด lock ์š”์ฒญ์— ์‘๋‹ต
  • ์š”์ฒญํ•˜๋Š” transaction์€ ์š”์ฒญ์— ์‘๋‹ตํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ
  • Lock Table
    • Lock manager๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ
    • ์Šน์ธ๋œ lock๊ณผ ๋ณด๋ฅ˜ ์ค‘์ธ ์š”์ฒญ์„ ๊ธฐ๋ก
    • ์ผ๋ฐ˜์ ์œผ๋กœ lock์ด ๊ฑธ๋ฆฐ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์˜ ์ด๋ฆ„์„ ์ธ๋ฑ์Šค๋กœ ํ•˜๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”๋กœ ๊ตฌํ˜„
    • ๊ฐ ํ•ด์‹œ๋œ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์— ๋Œ€ํ•ด, ์š”์ฒญ์ด ๋„์ฐฉํ•œ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•œ ๋ ˆ์ฝ”๋“œ์˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์กด์žฌ
    • ์ถฉ๋Œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด chaining ์‚ฌ์šฉ

Lock Table

  • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ๋ ˆ์ฝ”๋“œ์— ํฌํ•จ๋˜๋Š” ๊ฒƒ๋“ค
    • ์š”์ฒญ์„ ๋ณด๋‚ธ transaction
    • ์š”์ฒญํ•œ lock ๋ชจ๋“œ
    • ํ˜„์žฌ ์š”์ฒญ์ด ์Šน์ธ๋˜์—ˆ๋Š”์ง€์˜ ์—ฌ๋ถ€
  • ์ƒˆ๋กœ์šด lock ์š”์ฒญ ๋ฉ”์‹œ์ง€ ๋„์ฐฉ ์‹œ
    • ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๋์— ๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€ (๋น„์–ด ์žˆ์œผ๋ฉด ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ)
    • ์ด์ „์˜ ๋ชจ๋“  lock๊ณผ compatibleํ•˜๋ฉด ์Šน์ธ
  • unlock ๋ฉ”์‹œ์ง€ ๋„์ฐฉ ์‹œ
    • ๋ฆฌ์ŠคํŠธ์—์„œ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ ์‚ญ์ œ
    • ๋’ค๋”ฐ๋ฅด๋Š” ๋ ˆ์ฝ”๋“œ (์žˆ๋Š” ๊ฒฝ์šฐ)๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์ด์ œ ์Šน์ธ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ
  • Transaction์ด Abortํ•˜๋ฉด, transaction์˜ ๋Œ€๊ธฐ ์ค‘์ด๊ฑฐ๋‚˜ ์Šน์ธ๋œ ๋ชจ๋“  ์š”์ฒญ์ด ์‚ญ์ œ๋จ.
    • Lock manager๋Š” ์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ transaction์ด ๋ณด์œ ํ•œ lock์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ.

(Optional) Graph-based Protocols

alt text

  • ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ์ถฉ๋Œ ์ง๋ ฌ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” Two-Phase locking ์ด์™ธ์˜ ๋‹ค๋ฅธ locking protocol์„ ๊ณ ์•ˆํ•  ์ˆ˜ ์žˆ์Œ.
  • ๊ฐ„๋‹จํ•œ ์ถ”๊ฐ€ ์ •๋ณด: Database ์•„์ดํ…œ์— ์ ‘๊ทผํ•˜๋Š” ์ˆœ์„œ
    • ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์˜ ์ง‘ํ•ฉ D={d1,ย d2,ย โ€ฆ,ย dh}\mathbf{D} = \{d_1,~d_2,~\dots,~d_h\}D={d1โ€‹,ย d2โ€‹,ย โ€ฆ,ย dhโ€‹}์— partial ordering (โ†’)๋ฅผ ๋ถ€๊ณผ
    • diโ†’djd_i \to d_jdiโ€‹โ†’djโ€‹์ด๋ฉด, did_idiโ€‹์™€ djd_jdjโ€‹ ๋ชจ๋‘์— ์ ‘๊ทผํ•˜๋Š” ๋ชจ๋“  transaction์€ djd_jdjโ€‹๋ณด๋‹ค did_idiโ€‹์— ๋จผ์ € ์ ‘๊ทผํ•ด์•ผ ํ•จ.
    • ์ด๋Ÿฌํ•œ partial ordering์€ Data์˜ ๋…ผ๋ฆฌ์  ๋˜๋Š” ๋ฌผ๋ฆฌ์  ์กฐ์ง์˜ ๊ฒฐ๊ณผ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ์˜ค๋กœ์ง€ concurrency control ๋ชฉ์ ์œผ๋กœ๋งŒ ๋ถ€๊ณผ๋  ์ˆ˜๋„ ์žˆ์Œ.
    • ์ง‘ํ•ฉ D๋Š” ์ด์ œ directed Acyclic Graph(Database Graph)๋กœ ๋ณผ ์ˆ˜ ์žˆ์Œ.
  • Tree Protocol: X-lock๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์ œํ•œ๋œ ๊ฐ„๋‹จํ•œ Graph-based Protocol
    • ๊ฐ transaction TiT_iTiโ€‹๋Š” ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์„ ์ตœ๋Œ€ ํ•œ ๋ฒˆ lockํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค์Œ ๊ทœ์น™์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•จ.
      • TiT_iTiโ€‹์˜ ์ฒซ ๋ฒˆ์งธ lock์€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์— ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ.
      • ๊ทธ ํ›„, ๋ฐ์ดํ„ฐ ์•„์ดํ…œ Q๋Š” QQQ์˜ parent๊ฐ€ ํ˜„์žฌ TiT_iTiโ€‹์— ์˜ํ•ด lock๋œ ๊ฒฝ์šฐ์—๋งŒ TiT_iTiโ€‹์— ์˜ํ•ด lock๋  ์ˆ˜ ์žˆ์Œ.
      • ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์€ ์–ธ์ œ๋“ ์ง€ unlock๋  ์ˆ˜ ์žˆ์Œ.
      • TiT_iTiโ€‹์— ์˜ํ•ด lock๋˜๊ณ  unlock๋œ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์€ ๊ทธ ํ›„์— TiT_iTiโ€‹์— ์˜ํ•ด ๋‹ค์‹œ lock๋  ์ˆ˜ ์—†์Œ.
  • Tree Protocol์€ ์ถฉ๋Œ ์ง๋ ฌ์„ฑ๊ณผ deadlock์œผ๋กœ๋ถ€ํ„ฐ์˜ ์ž์œ ๋ฅผ ๋ณด์žฅ
  • Tree Protocol์—์„œ๋Š” 2PL๋ณด๋‹ค unlock์ด ๋” ์ผ์ฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.
    • ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋‹จ์ถ• ๋ฐ ๋™์‹œ์„ฑ ์ฆ๊ฐ€
    • Protocol์€ Deadlock-free: rollback์ด ํ•„์š” ์—†์Œ.
  • ๋‹จ์ 
    • ์ด ์—ญ์‹œ recoverability ๋˜๋Š” cascade freedom์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ.
      • Recoverability ๋ณด์žฅ์„ ์œ„ํ•ด commit dependency ๋„์ž… ํ•„์š”
      • TiT_iTiโ€‹๊ฐ€ uncommitted ๋ฐ์ดํ„ฐ ์•„์ดํ…œ Q๋ฅผ ์ฝ์„ ๋•Œ, Q๋ฅผ ๋งˆ์ง€๋ง‰์œผ๋กœ writeํ•œ uncommitted transaction์— ๋Œ€ํ•œ TiT_iTiโ€‹์˜ commit dependency๋ฅผ ๊ธฐ๋ก
      • TiT_iTiโ€‹๋Š” commit dependency๋ฅผ ๊ฐ€์ง„ ๋ชจ๋“  transaction์ด commit๋  ๋•Œ๊นŒ์ง€ commit์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ: ์ด๋“ค ์ค‘ ํ•˜๋‚˜๋ผ๋„ abortํ•˜๋ฉด TiT_iTiโ€‹๋„ abort๋˜์–ด์•ผ ํ•จ.
    • Transaction์€ ์ ‘๊ทผํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ์•„์ดํ…œ๋„ lockํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Œ.
      • ์˜ˆ: A์™€ J์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด B, D, H ์•„์ดํ…œ๋„ lockํ•ด์•ผ ํ•จ.
      • Locking overhead ์ฆ๊ฐ€ ๋ฐ ์ถ”๊ฐ€ ๋Œ€๊ธฐ ์‹œ๊ฐ„
      • ์ž ์žฌ์ ์ธ ๋™์‹œ์„ฑ ๊ฐ์†Œ
  • 2PL์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•œ ์Šค์ผ€์ค„์ด tree protocol์—์„œ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ทธ ๋ฐ˜๋Œ€๋„ ๊ฐ€๋Šฅ

Deadlock Prevention

T3T_3T3โ€‹T4T_4T4โ€‹
lock-X(B)\text{lock-X}(B)lock-X(B)
read(B)\text{read}(B)read(B)
B:=Bโˆ’50B:=B-50B:=Bโˆ’50
write(B)\text{write}(B)write(B)
lock-S(A)\text{lock-S}(A)lock-S(A)
read(A)\text{read}(A)read(A)
lock-S(B)\text{lock-S}(B)lock-S(B)
lock-S(A)\text{lock-S}(A)lock-S(A)
  • Deadlock: Transaction ์ง‘ํ•ฉ์ด ์กด์žฌํ•˜์—ฌ, ์ง‘ํ•ฉ ๋‚ด์˜ ๋ชจ๋“  transaction์ด ์ง‘ํ•ฉ ๋‚ด์˜ ๋‹ค๋ฅธ transaction์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ
  • Deadlock Prevention Protocols: ์‹œ์Šคํ…œ์ด deadlock ์ƒํƒœ๋กœ ์ง„์ž…ํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•˜๋Š” protocol. ์ผ๋ถ€ ์˜ˆ๋ฐฉ ์ „๋žต
    • ๊ฐ transaction์ด ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์„ lockํ•˜๋„๋ก ์š”๊ตฌ ('Hold-and-wait' ์กฐ๊ฑด ์ œ๊ฑฐ)
    • ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์— partial ordering๋ฅผ ๋ถ€๊ณผํ•˜๊ณ  transaction์ด ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์„ ์ง€์ •๋œ ์ˆœ์„œ๋กœ๋งŒ lockํ•  ์ˆ˜ ์žˆ๋„๋ก ์š”๊ตฌ ('Circular wait' ์กฐ๊ฑด ์ œ๊ฑฐ)
  • Transaction timestamp-based Schemes
    • Wait-Die Scheme (Non-preemptive)
      • older transaction์€ Younger transaction์ด ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์„ ํ•ด์ œํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ์Œ.
      • Younger transaction์€ older transaction์„ ์ ˆ๋Œ€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์œผ๋ฉฐ, ๋Œ€์‹  rollback๋จ.
    • Wound-Wait Scheme (Preemptive)
      • older transaction์€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€์‹  Younger transaction์„ wound(Rollback ๊ฐ•์ œ)
      • Younger transaction์€ older transaction์„ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ์Œ.
    • ๋‘ Scheme ๋ชจ๋‘
      • ๊ฒฝ๋กœ์šฐ๋Œ€์‚ฌ์ƒ ๊ธฐ๋ฐ˜
      • Rollback๋œ transaction์€ ์›๋ž˜ timestamp๋กœ ๋‹ค์‹œ ์‹œ์ž‘๋˜์–ด starvation์„ ๋ฐฉ์ง€
      • ๋ถˆํ•„์š”ํ•œ rollback์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.
  • Lock Timeout-based Schemes (Deadlock ํƒ์ง€ & ๋ณต๊ตฌ์™€ ์œ ์‚ฌ)
    • Transaction์€ lock์„ ์œ„ํ•ด ์ง€์ •๋œ ์‹œ๊ฐ„ ๋™์•ˆ๋งŒ ๋Œ€๊ธฐ
    • ๊ทธ ํ›„, ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜๋ฉด transaction์ด rollback๋จ.
    • Deadlock์ด ๋ฐœ์ƒํ•˜๋ฉด timeout์œผ๋กœ ํ•ด๊ฒฐ๋˜๋„๋ก ๋ณด์žฅ
    • ๊ตฌํ˜„์€ ๊ฐ„๋‹จํ•˜์ง€๋งŒ, deadlock์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋„ transaction์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ rollbackํ•  ์ˆ˜ ์žˆ์Œ.
    • ์ ์ ˆํ•œ timeout ๊ฐ„๊ฒฉ ๊ฐ’์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์–ด๋ ค์›€
    • Starvation ๋˜ํ•œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

Deadlock Detection

  • Wait-for Graph: Transaction์„ ์ •์ ์œผ๋กœ ํ•˜๋Š” directed graph
    • Tiโ†’TjT_i \to T_jTiโ€‹โ†’Tjโ€‹๋กœ์˜ Edge: TiT_iTiโ€‹๊ฐ€ TjT_jTjโ€‹๊ฐ€ conflicting ๋ชจ๋“œ๋กœ ๋ณด์œ ํ•œ lock์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ
    • ์‹œ์Šคํ…œ์ด deadlock ์ƒํƒœ โ€…โ€ŠโŸบโ€…โ€Š\iffโŸบ wait-for Graph์— cycle์ด ์žˆ์Œ.
  • ์ฃผ๊ธฐ์ ์œผ๋กœ deadlock-Detection ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ˜ธ์ถœํ•˜์—ฌ cycle์„ ์ฐพ์Œ.
  • Deadlock์ด ๊ฐ์ง€๋˜๋ฉด
    • Deadlock cycle์„ ๊นจ๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ transaction์ด rollback๋˜์–ด์•ผ ํ•จ (Victim)
    • Victim์œผ๋กœ ์ตœ์†Œ ๋น„์šฉ์„ ์ดˆ๋ž˜ํ•˜๋Š” transaction์„ ์„ ํƒ
    • Rollback: Transaction์„ ์–ด๋””๊นŒ์ง€ rollbackํ• ์ง€ ๊ฒฐ์ •
      • Total rollback: Transaction์„ abortํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘
      • Partial rollback: Cycle ๋‚ด์˜ ๋‹ค๋ฅธ transaction์ด ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” lock์„ ํ•ด์ œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ victim transaction์„ rollback
    • Starvation ๊ฐ€๋Šฅ์„ฑ โ†’ ํ•ด๊ฒฐ์ฑ…
      • ๊ฐ€์žฅ ์˜ค๋ž˜๋œ transaction์€ victim์œผ๋กœ ์„ ํƒํ•˜์ง€ ์•Š์Œ.

Multiple Granularity

  • ์ง€๊ธˆ๊นŒ์ง€ ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์„ locking unit์œผ๋กœ ์‚ฌ์šฉ
  • ๋•Œ๋กœ๋Š” ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์„ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฐœ๋ณ„ locking unit์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌ
    • ์˜ˆ: ์ „์ฒด relation์„ ์Šค์บ”ํ•  ๋•Œ, Tuple-level lock์„ ๋ฐœํ–‰ํ•˜๋Š” ๋Œ€์‹  ์ „์ฒด relation์„ lockํ•˜๋Š” ๋‹จ์ผ lock ์š”์ฒญ์„ ๋ฐœํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ.
    • โ†’ ์‹œ์Šคํ…œ์ด ๋‹ค์ค‘ ์ˆ˜์ค€์˜ Granularity๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”
  • ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์ด ๋‹ค์–‘ํ•œ ํฌ๊ธฐ๋ฅผ ๊ฐ–๋„๋ก ํ—ˆ์šฉํ•˜๊ณ , ์ž‘์€ Granularity๊ฐ€ ๋” ํฐ Granularity ๋‚ด์— Nest๋˜๋Š” ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ •์˜
    • Tree ํ˜•ํƒœ๋กœ ๊ทธ๋ž˜ํ”ฝ์ ์œผ๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ
  • Transaction์ด Tree์˜ ๋…ธ๋“œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ lockํ•˜๋ฉด, ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ชจ๋“  Descendant๋ฅผ ๊ฐ™์€ ๋ชจ๋“œ๋กœ ์•”๋ฌต์ ์œผ๋กœ lock
  • Locking Granularity(Locking์ด ์ˆ˜ํ–‰๋˜๋Š” Tree์˜ ์ˆ˜์ค€)
    • Fine Granularity (Tree์˜ ํ•˜์œ„): ๋†’์€ ๋™์‹œ์„ฑ, ๋†’์€ locking overhead
    • Coarse Granularity (Tree์˜ ์ƒ์œ„): ๋‚ฎ์€ locking overhead, ๋‚ฎ์€ ๋™์‹œ์„ฑ

Example of Granularity Hierarchy

  • ๊ฐ€์žฅ ๊ฑฐ์นœ(์ƒ์œ„) ์ˆ˜์ค€๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ˆ˜์ค€
    • Database (DB) โ†’ Area (A1,A2)(A_1, A_2)(A1โ€‹,A2โ€‹) โ†’ File (Fa,ย Fb,ย Fc)(F_a,~F_b,~F_c)(Faโ€‹,ย Fbโ€‹,ย Fcโ€‹) โ†’ record

  • ๋ฌธ์ œ: T1T_1T1โ€‹์ด FcF_cFcโ€‹์— X-lock์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •. FcF_cFcโ€‹์— ์†ํ•˜๋Š” ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์— X-lock์„ ์•”๋ฌต์ ์œผ๋กœ ๋ณด์œ 
    • Case 1: T2T_2T2โ€‹๊ฐ€ rc1r_{c1}rc1โ€‹์— ๋Œ€ํ•œ lock ์š”์ฒญ์„ ๋ฐœํ–‰ (๋ช…์‹œ์ ์œผ๋กœ lock๋˜์ง€ ์•Š์Œ). T2T_2T2โ€‹๊ฐ€ rc1r_{c1}rc1โ€‹์„ lockํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •?
      • Root์—์„œ rc1r_{c1}rc1โ€‹๊นŒ์ง€ Tree๋ฅผ Traverseํ•ด์•ผ ํ•˜๋ฉฐ, ํ•ด๋‹น ๊ฒฝ๋กœ์˜ ์–ด๋–ค ๋…ธ๋“œ๋ผ๋„ Incompatible ๋ชจ๋“œ๋กœ lock๋˜์–ด ์žˆ์œผ๋ฉด T2T_2T2โ€‹๋Š” ๋Œ€๊ธฐํ•ด์•ผ ํ•จ.
    • Case 2: T3T_3T3โ€‹๊ฐ€ ์ „์ฒด DB์— ๋Œ€ํ•œ lock ์š”์ฒญ์„ ๋ฐœํ–‰. ์ด๋Š” ์Šน์ธ๋˜์–ด์„œ๋Š” ์•ˆ ๋จ. ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •?
      • Incompatible lock์ด ์žˆ๋Š”์ง€ ์ „์ฒด Tree๋ฅผ Traverseํ•˜์—ฌ ํ™•์ธํ•ด์•ผ ํ•จ.
  • ํ•ด๊ฒฐ์ฑ…: Intention lock ๋ชจ๋“œ

Intention Lock Modes

  • S ๋ฐ X lock ๋ชจ๋“œ ์™ธ์—, Multiple Granularity๋ฅผ ์œ„ํ•œ ์„ธ ๊ฐ€์ง€ ์ถ”๊ฐ€ lock ๋ชจ๋“œ(Intention lock Modes)
    • Intention-shared (IS): Tree์˜ ํ•˜์œ„ ์ˆ˜์ค€์—์„œ ๋ช…์‹œ์  locking์ด Shared ๋ชจ๋“œ lock์œผ๋กœ๋งŒ ์ˆ˜ํ–‰๋จ์„ ๋‚˜ํƒ€๋ƒ„
    • Intention-exclusive (IX): Tree์˜ ํ•˜์œ„ ์ˆ˜์ค€์—์„œ ๋ช…์‹œ์  locking์ด Exclusive ๋ชจ๋“œ ๋˜๋Š” Shared ๋ชจ๋“œ lock์œผ๋กœ ์ˆ˜ํ–‰๋จ์„ ๋‚˜ํƒ€๋ƒ„
    • Shared and intention-exclusive (SIX): ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ root๋กœ ํ•˜๋Š” Subtree๊ฐ€ Shared ๋ชจ๋“œ๋กœ ๋ช…์‹œ์ ์œผ๋กœ lock๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ•˜์œ„ ์ˆ˜์ค€์—์„œ Exclusive ๋ชจ๋“œ lock์œผ๋กœ ๋ช…์‹œ์  locking์ด ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ„
  • ๋…ธ๋“œ๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ lock๋˜๊ธฐ ์ „์— ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ชจ๋“  ancestor์— intention lock์ด ์„ค์ •๋จ.
    • Ancestor ๋…ธ๋“œ๋ฅผ S ๋˜๋Š” X ๋ชจ๋“œ๋กœ lockํ•  ๋•Œ ๋ชจ๋“  descendant ๋…ธ๋“œ๋ฅผ ํ™•์ธํ•  ํ•„์š” ์—†์ด ํ—ˆ์šฉ
  • ๋ชจ๋“  lock ๋ชจ๋“œ์— ๋Œ€ํ•œ compatibility Matrix
ISIXSSIXX
IStruetruetruetruefalse
IXtruetruefalsefalsefalse
Struefalsetruefalsefalse
SIXtruefalsefalsefalsefalse
Xfalsefalsefalsefalsefalse

Multiple Granularity Locking Protocol

  • Transaction TiT_iTiโ€‹๋Š” ๋‹ค์Œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ Node QQQ๋ฅผ lockํ•  ์ˆ˜ ์žˆ์Œ.
    1. Lock compatibility matrix๋ฅผ ์ค€์ˆ˜ํ•ด์•ผ ํ•จ.
    2. Tree์˜ root๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € lock๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์–ด๋–ค ๋ชจ๋“œ๋กœ๋“  lock๋  ์ˆ˜ ์žˆ์Œ.
    3. Node QQQ๋Š” TiT_iTiโ€‹์˜ parent๊ฐ€ ํ˜„์žฌ IX ๋˜๋Š” iS ๋ชจ๋“œ๋กœ lock๋œ ๊ฒฝ์šฐ์—๋งŒ S ๋˜๋Š” iS ๋ชจ๋“œ๋กœ lock๋  ์ˆ˜ ์žˆ์Œ.
    4. Node QQQ๋Š” TiT_iTiโ€‹์˜ parent๊ฐ€ ํ˜„์žฌ IX ๋˜๋Š” SIX ๋ชจ๋“œ๋กœ lock๋œ ๊ฒฝ์šฐ์—๋งŒ X, sIX, ๋˜๋Š” iX ๋ชจ๋“œ๋กœ lock๋  ์ˆ˜ ์žˆ์Œ.
    5. TiT_iTiโ€‹๋Š” ์ด์ „์— ์–ด๋– ํ•œ ๋…ธ๋“œ๋„ unlockํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ ๋…ธ๋“œ๋ฅผ lockํ•  ์ˆ˜ ์žˆ์Œ (์ฆ‰, TiT_iTiโ€‹๋Š” Two-Phase)
    6. TiT_iTiโ€‹๋Š” QQQ์˜ ์ž์‹ ์ค‘ TiT_iTiโ€‹์— ์˜ํ•ด ํ˜„์žฌ lock๋œ ๊ฒƒ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ Node QQQ๋ฅผ unlockํ•  ์ˆ˜ ์žˆ์Œ.
  • Lock์€ root์—์„œ leaf ์ˆœ์„œ๋กœ ํš๋“๋˜๋Š” ๋ฐ˜๋ฉด, leaf์—์„œ root ์ˆœ์„œ๋กœ ํ•ด์ œ๋จ์„ ๊ด€์ฐฐ
  • Lock Granularity Escalation: ํŠน์ • ์ˆ˜์ค€์— lock์ด ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒฝ์šฐ, ๋” ๋†’์€ Granularity S ๋˜๋Š” X lock์œผ๋กœ ์ „ํ™˜

Insert/Delete Operations

  • ์ง€๊ธˆ๊นŒ์ง€ read ๋ฐ write ์—ฐ์‚ฐ์— ๊ตญํ•œํ•˜์—ฌ ๋…ผ์˜
  • ์ผ๋ถ€ transaction์€ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์„ ์ƒ์„ฑ (Insert)ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์„ ์ œ๊ฑฐ (Delete)
  • Insert/Delete ์—ฐ์‚ฐ์— ๋Œ€ํ•œ locking ๊ทœ์น™
    • Read/write ์ถฉ๋Œ๊ณผ delete๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์•„์ดํ…œ์ด Delete๋˜๊ธฐ ์ „์— X-lock์„ ํš๋“ํ•ด์•ผ ํ•จ.
    • Transaction์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ƒˆ๋กœ์šด tuple์„ ์‚ฝ์ž…ํ•  ๋•Œ, ํ•ด๋‹น Tuple์— ๋Œ€ํ•œ X-lock์ด ์ž๋™์œผ๋กœ ๋ถ€์—ฌ โ†’ Tuple์„ ์‚ฝ์ž…ํ•˜๋Š” transaction์ด commit๋  ๋•Œ๊นŒ์ง€ ์‚ฝ์ž…๋œ Tuple์€ ๋‹ค๋ฅธ transaction์ด ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ.

Timestamp-Based Protocols

  • ๊ฐ transaction TiT_iTiโ€‹๋Š” ์‹œ์Šคํ…œ์— ์ง„์ž…ํ•  ๋•Œ timestamp TS(Ti)\text{TS}(T_i)TS(Tiโ€‹)๊ฐ€ ๋ถ€์—ฌ๋จ.
  • ๊ฐ transaction์€ ๊ณ ์œ ํ•œ timestamp๋ฅผ ๊ฐ€์ง.
  • Newer transaction์€ Earlier transaction๋ณด๋‹ค timestamp๊ฐ€ ์—„๊ฒฉํ•˜๊ฒŒ ํผ.
  • Timestamp๋Š” ์‹œ์Šคํ…œ ํด๋Ÿญ ๋˜๋Š” ๋…ผ๋ฆฌ์  counter์ผ ์ˆ˜ ์žˆ์Œ.
  • Timestamp-based Protocols์€ transaction์˜ timestamp๊ฐ€ serializability order๋ฅผ ๊ฒฐ์ •ํ•˜๋„๋ก ๋™์‹œ ์‹คํ–‰์„ ๊ด€๋ฆฌ
    • TS(Ti)<TS(Tj)\text{TS}(T_i) < \text{TS}(T_j)TS(Tiโ€‹)<TS(Tjโ€‹)์ด๋ฉด, ์‹œ์Šคํ…œ์€ ์ƒ์„ฑ๋œ ์Šค์ผ€์ค„์ด TiT_iTiโ€‹๊ฐ€ TjT_jTjโ€‹๋ณด๋‹ค ๋จผ์ € ๋‚˜ํƒ€๋‚˜๋Š” ์ง๋ ฌ ์Šค์ผ€์ค„๊ณผ ๋™๋“ฑํ•˜๋„๋ก ๋ณด์žฅํ•ด์•ผ ํ•จ.
  • ๊ตฌํ˜„์„ ์œ„ํ•ด ๊ฐ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ Q์— ๋‘ ๊ฐœ์˜ timestamp๋ฅผ ์—ฐ๊ฒฐ
    • W-timestamp(Q)\text{W-timestamp}(Q)W-timestamp(Q): write(Q)\text{write}(Q)write(Q)๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰ํ•œ transaction ์ค‘ ๊ฐ€์žฅ ํฐ Timestamp
    • R-timestamp(Q)\text{R-timestamp}(Q)R-timestamp(Q): read(Q)\text{read}(Q)read(Q)๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰ํ•œ transaction ์ค‘ ๊ฐ€์žฅ ํฐ Timestamp
    • ์ด๋Ÿฌํ•œ Timestamp๋Š” ์ƒˆ๋กœ์šด read(Q)\text{read}(Q)read(Q) ๋˜๋Š” write(Q)\text{write}(Q)write(Q) Instruction์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์—…๋ฐ์ดํŠธ๋จ.
  • Timestamp๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋Œ€์•ˆ์ ์ธ protocol ์กด์žฌ

Timestamp-Ordering Protocol

  • Timestamp-Ordering (TSO) Protocol
  • Read ๋ฐ write ์—ฐ์‚ฐ์— ๊ทœ์น™์„ ๋ถ€๊ณผํ•˜์—ฌ ๋‹ค์Œ์„ ๋ณด์žฅ
    • ๋ชจ๋“  conflicting ์—ฐ์‚ฐ์€ Timestamp order๋กœ ์‹คํ–‰
    • out of order ์—ฐ์‚ฐ์€ transaction rollback ๋ฐ ์ƒˆ๋กœ์šด TS๋กœ ์žฌ์‹œ์ž‘์„ ์œ ๋ฐœ
  • Transaction TiT_iTiโ€‹๊ฐ€ read(Q)\text{read}(Q)read(Q)๋ฅผ ๋ฐœํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •
    1. TS(Ti)<W-timestamp(Q)\text{TS}(T_i) < \text{W-timestamp}(Q)TS(Tiโ€‹)<W-timestamp(Q)์ด๋ฉด, TiT_iTiโ€‹๋Š” ๋‚˜์ค‘ transaction์— ์˜ํ•ด ์ด๋ฏธ overwrite๋œ QQQ์˜ ๊ฐ’์„ ์ฝ์œผ๋ ค๊ณ  ํ•จ.
      • ๋”ฐ๋ผ์„œ read ์—ฐ์‚ฐ์€ ๊ฑฐ๋ถ€๋˜๊ณ  TiT_iTiโ€‹๋Š” rollback๋จ.
    2. TS(Ti)โ‰ฅW-timestamp(Q)\text{TS}(T_i) \ge \text{W-timestamp}(Q)TS(Tiโ€‹)โ‰ฅW-timestamp(Q)์ด๋ฉด, read ์—ฐ์‚ฐ์€ ์‹คํ–‰๋˜๊ณ  R-timestamp(Q)\text{R-timestamp}(Q)R-timestamp(Q)๋Š” max(R-timestamp(Q),ย TS(Ti))\text{max}(\text{R-timestamp}(Q),~\text{TS}(T_i))max(R-timestamp(Q),ย TS(Tiโ€‹))๋กœ ์„ค์ •๋จ.
  • Transaction TiT_iTiโ€‹๊ฐ€ write(Q)\text{write}(Q)write(Q)๋ฅผ ๋ฐœํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •
    1. TS(Ti)<R-timestamp(Q)\text{TS}(T_i) < \text{R-timestamp}(Q)TS(Tiโ€‹)<R-timestamp(Q)์ด๋ฉด, TiT_iTiโ€‹๊ฐ€ ์ƒ์„ฑํ•˜๋Š” QQQ์˜ ๊ฐ’์ด ์ด์ „์— ๋‚˜์ค‘ transaction์— ์˜ํ•ด ํ•„์š”ํ–ˆ์Œ (์ฆ‰, ๊ทธ ๊ฐ’์€ ๊ฒฐ์ฝ” ์ƒ์„ฑ๋˜์ง€ ์•Š์„ ๊ฒƒ์ž„)
      • ๋”ฐ๋ผ์„œ write ์—ฐ์‚ฐ์€ ๊ฑฐ๋ถ€๋˜๊ณ  TiT_iTiโ€‹๋Š” rollback๋จ.
    2. TS(Ti)<W-timestamp(Q)\text{TS}(T_i) < \text{W-timestamp}(Q)TS(Tiโ€‹)<W-timestamp(Q)์ด๋ฉด, TiT_iTiโ€‹๋Š” QQQ์˜ obsolete value๋ฅผ writeํ•˜๋ ค๊ณ  ํ•จ.
      • ๋”ฐ๋ผ์„œ ์ด write ์—ฐ์‚ฐ์€ ๊ฑฐ๋ถ€๋˜๊ณ  TiT_iTiโ€‹๋Š” rollback๋จ.
    3. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด, write ์—ฐ์‚ฐ์€ ์‹คํ–‰๋˜๊ณ  W-timestamp(Q)\text{W-timestamp}(Q)W-timestamp(Q)๋Š” TS(Ti)\text{TS}(T_i)TS(Tiโ€‹)๋กœ ์„ค์ •๋จ.

Example of Schedule under TSO

  • ์ด ์Šค์ผ€์ค„์ด TSO ํ•˜์—์„œ ์œ ํšจํ•œ๊ฐ€?
    • ์ดˆ๊ธฐ ๊ฐ€์ •
      • R-TS(A)=W-TS(A)=0\text{R-TS}(A) = \text{W-TS}(A) = 0R-TS(A)=W-TS(A)=0
      • R-TS(B)=W-TS(B)=0\text{R-TS}(B) = \text{W-TS}(B) = 0R-TS(B)=W-TS(B)=0
    • TS(T25)=25\text{TS}(T_{25}) = 25TS(T25โ€‹)=25์ด๊ณ  TS(T26)=26\text{TS}(T_{26}) = 26TS(T26โ€‹)=26์ด๋ผ๊ณ  ๊ฐ€์ •
T25T_{25}T25โ€‹T26T_{26}T26โ€‹
read(B)\text{read}(B)read(B)
read(B)\text{read}(B)read(B)
B:=Bโˆ’50B:=B-50B:=Bโˆ’50
write(B)\text{write}(B)write(B)
read(A)\text{read}(A)read(A)
read(A)\text{read}(A)read(A)
display(A+B)\text{display}(A+B)display(A+B)
A:=A+50A:=A+50A:=A+50
write(A)\text{write}(A)write(A)
display(A+B)\text{display}(A+B)display(A+B)
  • ์ด ์Šค์ผ€์ค„์€ TSO ํ•˜์—์„œ ์œ ํšจํ•จ.
  • ์ดˆ๊ธฐ์— R-TS(Q)=W-TS(Q)=0\text{R-TS}(Q) = \text{W-TS}(Q) = 0R-TS(Q)=W-TS(Q)=0์ธ ์ด ์Šค์ผ€์ค„์€?
TimeT27T_{27}T27โ€‹ (TS=27\text{TS}=27TS=27)T28T_{28}T28โ€‹ (TS=28\text{TS}=28TS=28)
111read(Q)\text{read}(Q)read(Q)
222write(Q)\text{write}(Q)write(Q)
333write(Q)\text{write}(Q)write(Q)
  • T27T_{27}T27โ€‹์˜ ๋‘ ๋ฒˆ์งธ write(Q)\text{write}(Q)write(Q) ์‹œ๋„์—์„œ TS(T27)=27<R-TS(Q)=28\text{TS}(T_{27}) = 27 < \text{R-TS}(Q) = 28TS(T27โ€‹)=27<R-TS(Q)=28์ด๋ฏ€๋กœ, write ์—ฐ์‚ฐ์€ ๊ฑฐ๋ถ€๋˜๊ณ  T27T_{27}T27โ€‹์€ rollback๋จ.

Thomasโ€™ Write Rule

  • Timestamp-Ordering Protocol์˜ ์ˆ˜์ •๋œ ๋ฒ„์ „์œผ๋กœ, obsolete write ์—ฐ์‚ฐ์€ ํŠน์ • ์ƒํ™ฉ์—์„œ ๋ฌด์‹œ๋  ์ˆ˜ ์žˆ์Œ.
  • TiT_iTiโ€‹๊ฐ€ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ Q๋ฅผ writeํ•˜๋ ค๊ณ  ํ•  ๋•Œ, (๊ทœ์น™์˜ ์ˆœ์„œ ์ค‘์š”)
    1. TS(Ti)<R-timestamp(Q)\text{TS}(T_i) < \text{R-timestamp}(Q)TS(Tiโ€‹)<R-timestamp(Q)์ด๋ฉด, write ์—ฐ์‚ฐ์€ ๊ฑฐ๋ถ€๋˜๊ณ  TiT_iTiโ€‹๋Š” rollback๋จ.
    2. TS(Ti)<W-timestamp(Q)\text{TS}(T_i) < \text{W-timestamp}(Q)TS(Tiโ€‹)<W-timestamp(Q)์ด๋ฉด, TiT_iTiโ€‹๋Š” QQQ์˜ obsolete value๋ฅผ writeํ•˜๋ ค๊ณ  ํ•จ.
    • TiT_iTiโ€‹๋ฅผ rollbackํ•˜๋Š” ๋Œ€์‹ , ์ด write ์—ฐ์‚ฐ์€ ๊ทธ๋ƒฅ ๋ฌด์‹œ๋  ์ˆ˜ ์žˆ์Œ.
    1. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด, write ์—ฐ์‚ฐ์€ ์‹คํ–‰๋˜๊ณ  W-timestamp(Q)\text{W-timestamp}(Q)W-timestamp(Q)๋Š” TS(Ti)\text{TS}(T_i)TS(Tiโ€‹)๋กœ ์„ค์ •๋จ.
  • ์ด Protocol์˜ ์ฒซ ๋ฒˆ์งธ์™€ ์„ธ ๋ฒˆ์งธ ๊ทœ์น™์€ Timestamp-Ordering Protocol๊ณผ ๋™์ผ
  • Thomasโ€™ write rule์˜ correctness
    • TiT_iTiโ€‹๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๊ทœ์น™์„ ํ†ต๊ณผ. ๋”ฐ๋ผ์„œ TS(Ti)โ‰ฅR-timestamp(Q)\text{TS}(T_i) \ge \text{R-timestamp}(Q)TS(Tiโ€‹)โ‰ฅR-timestamp(Q)
    • TS(Ti)<W-timestamp(Q)\text{TS}(T_i) < \text{W-timestamp}(Q)TS(Tiโ€‹)<W-timestamp(Q)์ด๋ฉด, R-timestamp(Q)โ‰คTS(Ti)<W-timestamp(Q)\text{R-timestamp}(Q) \le \text{TS}(T_i) < \text{W-timestamp}(Q)R-timestamp(Q)โ‰คTS(Tiโ€‹)<W-timestamp(Q)
    • ์ด๋Š” Q๋ฅผ writeํ•œ transaction์ด Q๋ฅผ ์ฝ์€ ์ ์ด ์—†์Œ์„ ์˜๋ฏธ (Blind write)
    • Blind write๋Š” ์•„์ดํ…œ์˜ ์ด์ „ ๊ฐ’์— ์˜์กดํ•˜์ง€ ์•Š์Œ โ†’ ์ด์ „ write๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ๋ฌด์‹œ๋  ์ˆ˜ ์žˆ์Œ.
  • Thomasโ€™ write rule์€ ๋” ํฐ ์ž ์žฌ์  ๋™์‹œ์„ฑ์„ ํ—ˆ์šฉ
  • Conflict-Serializableํ•˜์ง€ ์•Š์€ ์ผ๋ถ€ View-Serializable ์Šค์ผ€์ค„์„ ํ—ˆ์šฉ

Validation-based Protocols (Optimistic Concurrency Control)

  • Concurrency-Control Scheme
    • Code ์‹คํ–‰ overhead๋ฅผ ๋ถ€๊ณผ
    • Transaction ์‹คํ–‰์„ ์ง€์—ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ.
  • ๋Œ€๋‹ค์ˆ˜ transaction์ด read-only์ด๊ณ  transaction ๊ฐ„์˜ ์ถฉ๋Œ ๋น„์œจ์ด ๋‚ฎ์€ ๊ฒฝ์šฐ
    • Concurrency-Control ์—†์ด ์‹คํ–‰๋˜๋”๋ผ๋„ ๋งŽ์€ transaction์ด ์‹œ์Šคํ…œ์„ ์ผ๊ด€๋œ ์ƒํƒœ๋กœ ๋‚จ๊ธธ ๊ฒƒ
    • โ†’ ๋” ์ ์€ overhead๋ฅผ ๋ถ€๊ณผํ•˜๋Š” ๋Œ€์•ˆ์ ์ธ Concurrency-Control Scheme์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ.
  • Idea: Concurrency control ์—†์ด (๋กœ์ปฌ ๋ณ€์ˆ˜์—์„œ) ์‹คํ–‰ํ•œ ๋‹ค์Œ, serializability ์œ„๋ฐ˜์„ ์ผ์œผํ‚ค์ง€ ์•Š์œผ๋ฉด DB์— write (์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด)
    • Write๋Š” transaction ์ข…๋ฃŒ ์‹œ์ ์œผ๋กœ ์—ฐ๊ธฐ
    • Transaction์ด read/writeํ•œ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์„ ์ถ”์ 
    • Commit ์‹œ์ ์— ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ Serialization order๋ฅผ ๋ฒ—์–ด๋‚œ read/write๋ฅผ ๊ฐ์ง€
  • Transaction์ด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋™์•ˆ ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ๋  ๊ฒƒ์ด๋ผ๋Š” ํฌ๋ง์œผ๋กœ ์™„์ „ํžˆ ์‹คํ–‰๋˜๋ฏ€๋กœ **Optimistic Concurrency Control (OCC)**์ด๋ผ๊ณ ๋„ ํ•จ.
  • Transaction TiT_iTiโ€‹์˜ ์‹คํ–‰์€ ์„ธ ๋‹จ๊ณ„๋กœ ์ˆ˜ํ–‰
    1. Read and Execution Phase: TiT_iTiโ€‹ ์‹คํ–‰. ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์„ (์ž„์‹œ) ๋กœ์ปฌ ๋ณ€์ˆ˜์— ์ฝ๊ณ  ์ €์žฅ. ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—…๋ฐ์ดํŠธ ์—†์ด ๋กœ์ปฌ ๋ณ€์ˆ˜์— write
    2. Validation Phase: TiT_iTiโ€‹๋Š” ์ง๋ ฌ์„ฑ์„ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š๊ณ  ๋กœ์ปฌ ๋ณ€์ˆ˜๋ฅผ writeํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ Validation test(์œ ํšจ์„ฑ ๊ฒ€์ฆ)๋ฅผ ์ˆ˜ํ–‰. transaction์ด validation test์— ์‹คํŒจํ•˜๋ฉด Abort๋จ (Rollback ํ•„์š” ์—†์Œ).
    3. Write Phase: TiT_iTiโ€‹๊ฐ€ validate๋˜๋ฉด ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉ๋จ (Read-only transaction์€ ์ด ๋‹จ๊ณ„๋ฅผ ์ƒ๋žต)
  • ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” transaction์˜ ์„ธ ๋‹จ๊ณ„๋Š” interleave๋  ์ˆ˜ ์žˆ์Œ.
  • ํ•˜์ง€๋งŒ ๊ฐ transaction์€ ๋ฐ˜๋“œ์‹œ ๊ทธ ์ˆœ์„œ๋Œ€๋กœ ์„ธ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•จ.
  • ๋‹จ์ˆœํ™”๋ฅผ ์œ„ํ•ด validation ๋ฐ write ๋‹จ๊ณ„๋Š” ์›์ž์ ์ด๊ณ  ์ง๋ ฌ์ ์œผ๋กœ ํ•จ๊ป˜ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๊ฐ€์ •
    • ์ฆ‰, ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ transaction๋งŒ validation/write๋ฅผ ์‹คํ–‰
  • ๊ฐ transaction TiT_iTiโ€‹๋Š” 3๊ฐœ์˜ timestamp๋ฅผ ๊ฐ€์ง.
    • StartTS(Ti)\text{StartTS}(T_i)StartTS(Tiโ€‹): TiT_iTiโ€‹๊ฐ€ ์‹คํ–‰์„ ์‹œ์ž‘ํ•œ ์‹œ๊ฐ„
    • ValidationTS(Ti)\text{ValidationTS}(T_i)ValidationTS(Tiโ€‹): TiT_iTiโ€‹๊ฐ€ validation ๋‹จ๊ณ„์— ์ง„์ž…ํ•œ ์‹œ๊ฐ„
    • FinishTS(Ti)\text{FinishTS}(T_i)FinishTS(Tiโ€‹): TiT_iTiโ€‹๊ฐ€ write ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•œ ์‹œ๊ฐ„
  • ValidationTS(Ti)\text{ValidationTS}(T_i)ValidationTS(Tiโ€‹)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ TSO์— ์˜ํ•ด serializability order๋ฅผ ๊ฒฐ์ •
    • ์ฆ‰, TS(Ti)=ValidationTS(Ti)\text{TS}(T_i) = \text{ValidationTS}(T_i)TS(Tiโ€‹)=ValidationTS(Tiโ€‹)
    • TS(Tj)<TS(Tk)\text{TS}(T_j) < \text{TS}(T_k)TS(Tjโ€‹)<TS(Tkโ€‹)์ด๋ฉด, ์ƒ์„ฑ๋œ ๋ชจ๋“  ์Šค์ผ€์ค„์€ TjT_jTjโ€‹๊ฐ€ TkT_kTkโ€‹๋ณด๋‹ค ๋จผ์ € ๋‚˜ํƒ€๋‚˜๋Š” ์ง๋ ฌ ์Šค์ผ€์ค„๊ณผ ๋™๋“ฑํ•ด์•ผ ํ•จ.
  • Validation test๋Š” ์œ„ timestamp์™€ read/write Set์„ ์‚ฌ์šฉํ•˜์—ฌ serializability order๊ฐ€ validation time์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋„๋ก ๋ณด์žฅ
    • Read Set of TiT_iTiโ€‹: TiT_iTiโ€‹๊ฐ€ readํ•œ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์˜ ์ง‘ํ•ฉ
    • Write Set of TiT_iTiโ€‹: TiT_iTiโ€‹๊ฐ€ writeํ•œ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์˜ ์ง‘ํ•ฉ
  • Validation-based protocol์€ ์ถฉ๋Œ ํ™•๋ฅ ์ด ๋‚ฎ์€ ๊ฒฝ์šฐ locking/TSO๋ณด๋‹ค ๋” ๋†’์€ ๋™์‹œ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์ง.

Validation Test

  • Transaction TiT_iTiโ€‹์— ๋Œ€ํ•œ validation test๋Š” TS(Tk)<TS(Ti)\text{TS}(T_k) < \text{TS}(T_i)TS(Tkโ€‹)<TS(Tiโ€‹)์ธ ๋ชจ๋“  TkT_kTkโ€‹์— ๋Œ€ํ•ด ๋‹ค์Œ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๊ฐ€ holdํ•ด์•ผ ํ•จ์„ ์š”๊ตฌ
    • FinishTS(Tk)<StartTS(Ti)\text{FinishTS}(T_k) < \text{StartTS}(T_i)FinishTS(Tkโ€‹)<StartTS(Tiโ€‹)
      • TkT_kTkโ€‹๊ฐ€ TiT_iTiโ€‹๊ฐ€ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์‹คํ–‰์„ ์™„๋ฃŒํ–ˆ์œผ๋ฏ€๋กœ, serializability order๋Š” ์‹ค์ œ๋กœ ์œ ์ง€๋จ.
    • Write Set of TkT_kTkโ€‹ โˆฉ\capโˆฉ read Set of Ti=โˆ…T_i = \emptysetTiโ€‹=โˆ…, AND TkT_kTkโ€‹๊ฐ€ TiT_iTiโ€‹๊ฐ€ validation ๋‹จ๊ณ„๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— write ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒ
      • StartTS(Ti)<FinishTS(Tk)<ValidationTS(Ti)\text{StartTS}(T_i) < \text{FinishTS}(T_k) < \text{ValidationTS}(T_i)StartTS(Tiโ€‹)<FinishTS(Tkโ€‹)<ValidationTS(Tiโ€‹)
  • ์œ„ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๊ฐ€ holdํ•˜๋ฉด validation์€ ์„ฑ๊ณตํ•˜๊ณ  TiT_iTiโ€‹๋Š” write ๋‹จ๊ณ„๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด validation์€ ์‹คํŒจํ•˜๊ณ  TiT_iTiโ€‹๋Š” abort๋จ.
  • Justification
    • ์ฒซ ๋ฒˆ์งธ ์กฐ๊ฑด: Transaction์˜ ์‹คํ–‰์ด concurrentํ•˜์ง€ ์•Š์„ ๋•Œ ์ ์šฉ
      • Serializability order๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์œ ์ง€๋จ.
    • ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด: ์‹คํ–‰์ด concurrentํ•˜์ง€๋งŒ, TiT_iTiโ€‹๋Š” TkT_kTkโ€‹๊ฐ€ writeํ•œ ์–ด๋–ค ์•„์ดํ…œ๋„ readํ•˜์ง€ ์•Š์•˜๊ณ , TiT_iTiโ€‹๋Š” TkT_kTkโ€‹์˜ read์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์—†์Œ.
      • FinishTS(Tk)<ValidationTS(Ti)\text{FinishTS}(T_k) < \text{ValidationTS}(T_i)FinishTS(Tkโ€‹)<ValidationTS(Tiโ€‹)๋Š” TiT_iTiโ€‹์— ์˜ํ•œ write๊ฐ€ ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— write๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— TkT_kTkโ€‹๊ฐ€ TiT_iTiโ€‹์— ์˜ํ•œ ์–ด๋–ค write๋„ ๋ณด์ง€ ์•Š์•˜์Œ์„ ๋ณด์žฅ

Schedule Produced by Validation

  • Validation์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ์Šค์ผ€์ค„์˜ ์˜ˆ
T25T_{25}T25โ€‹T26T_{26}T26โ€‹
read(B)\text{read}(B)read(B)
read(B)\text{read}(B)read(B)
B:=Bโˆ’50B:=B-50B:=Bโˆ’50
read(A)\text{read}(A)read(A)
A:=A+50A:=A+50A:=A+50
read(A)\text{read}(A)read(A)
<validate>\text{<validate>}<validate>
display(A+B)\text{display}(A+B)display(A+B)

Read set of T25={A,ย B}T_{25} = \{A,~B\}T25โ€‹={A,ย B}
Write set of T25=โˆ…T_{25} = \emptysetT25โ€‹=โˆ…

Read set of T26={A,ย B}T_{26} = \{A,~B\}T26โ€‹={A,ย B}
Write set of T26={A,ย B}T_{26} = \{A,~B\}T26โ€‹={A,ย B}

StartTS(T26)<Finish\text{StartTS}(T_{26}) < \text{Finish}StartTS(T26โ€‹)<Finish

  • ์œ„ ์Šค์ผ€์ค„์€ ์ง๋ ฌ ์Šค์ผ€์ค„ <T25,ย T26><T_{25},~T_{26}><T25โ€‹,ย T26โ€‹> (Validation timestamp order)๊ณผ ๋™๋“ฑ
์ตœ๊ทผ ์ˆ˜์ •: 26. 1. 3. ์˜คํ›„ 9:57
Contributors: kmbzn
Prev
17. Transactions
Next
19. Recovery System

BUILT WITH

CloudflareNode.jsGitHubGitVue.jsJavaScriptVSCodenpm

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