# DB νΈλμμ (Transaction)
# νΈλ μμ μ΄λ?
λ°μ΄ν°λ² μ΄μ€μ μνλ₯Ό λ³νμν€κΈ° μν΄ μννλ μμ λ¨μ
μνλ₯Ό λ³νμν¨λ€λ κ² β SQL μ§μμ΄λ₯Ό ν΅ν΄ DBμ μ κ·Όνλ κ²
- SELECT
- INSERT
- DELETE
- UPDATE
μμ λ¨μ β λ§μ SQL λͺ λ Ήλ¬Έλ€μ μ¬λμ΄ μ νλ κΈ°μ€μ λ°λΌ μ νλ κ²
μμ) μ¬μ©μ Aκ° μ¬μ©μ Bμκ² λ§μμ μ‘κΈνλ€.
* μ΄λ DB μμ
- 1. μ¬μ©μ Aμ κ³μ’μμ λ§μμ μ°¨κ°νλ€ : UPDATE λ¬Έμ μ¬μ©ν΄ μ¬μ©μ Aμ μκ³ λ₯Ό λ³κ²½
- 2. μ¬μ©μ Bμ κ³μ’μ λ§μμ μΆκ°νλ€ : UPDATE λ¬Έμ μ¬μ©ν΄ μ¬μ©μ Bμ μκ³ λ₯Ό λ³κ²½
νμ¬ μμ
λ¨μ : μΆκΈ UPDATEλ¬Έ + μ
κΈ UPDATEλ¬Έ
β μ΄λ₯Ό ν΅νμ΄ νλμ νΈλμμ
μ΄λΌκ³ νλ€.
- μ λ 쿼리문 λͺ¨λ μ±κ³΅μ μΌλ‘ μλ£λμ΄μΌλ§ "νλμ μμ
(νΈλμμ
)"μ΄ μλ£λλ κ²μ΄λ€. `Commit`
- μμ
λ¨μμ μνλ 쿼리 μ€ νλλΌλ μ€ν¨νλ©΄ λͺ¨λ 쿼리문μ μ·¨μνκ³ μ΄μ μνλ‘ λλ €λμμΌνλ€. `Rollback`
μ¦, νλμ νΈλμμ μ€κ³λ₯Ό μ λ§λλ κ²μ΄ λ°μ΄ν°λ₯Ό λ€λ£° λ λ§μ μ΄μ μ κ°μ Έλ€μ€λ€.
# νΈλμμ νΉμ§
μμμ±(Atomicity)
νΈλμμ μ΄ DBμ λͺ¨λ λ°μλκ±°λ, νΉμ μ ν λ°μλμ§ μμμΌ λλ€.
μΌκ΄μ±(Consistency)
νΈλμμ μ μμ μ²λ¦¬ κ²°κ³Όλ νμ μΌκ΄μ± μμ΄μΌ νλ€.
λ 립μ±(Isolation)
λ μ΄μμ νΈλμμ μ΄ λμμ λ³ν μ€νλκ³ μμ λ, μ΄λ€ νΈλμμ λ λ€λ₯Έ νΈλμμ μ°μ°μ λΌμ΄λ€ μ μλ€.
μ§μμ±(Durability)
νΈλμμ μ΄ μ±κ³΅μ μΌλ‘ μλ£λμμΌλ©΄, κ²°κ³Όλ μꡬμ μΌλ‘ λ°μλμ΄μΌ νλ€.
# Commit
νλμ νΈλμμ μ΄ μ±κ³΅μ μΌλ‘ λλ¬κ³ , DBκ° μΌκ΄μ±μλ μνμΌ λ μ΄λ₯Ό μλ €μ£ΌκΈ° μν΄ μ¬μ©νλ μ°μ°
# Rollback
νλμ νΈλμμ μ²λ¦¬κ° λΉμ μμ μΌλ‘ μ’ λ£λμ΄ νΈλμμ μμμ±μ΄ κΉ¨μ§ κ²½μ°
transactionμ΄ μ μμ μΌλ‘ μ’ λ£λμ§ μμμ λ, last consistent state (μ) Transactionμ μμ μν) λ‘ roll back ν μ μμ.
μν©μ΄ μ£Όμ΄μ§λ©΄ DB μΈ‘λ©΄μμ μ΄λ»κ² ν΄κ²°ν μ μμμ§ λλ΅ν μ μμ΄μΌ ν¨
# Transaction κ΄λ¦¬λ₯Ό μν DBMSμ μ λ΅
μ΄ν΄λ₯Ό μν 2κ°μ§ κ°λ : DBMSμ ꡬ쑰 / Buffer κ΄λ¦¬ μ μ±
- DBMSμ ꡬ쑰
ν¬κ² 2κ°μ§ : Query Processor (μ§μ μ²λ¦¬κΈ°), Storage System (μ μ₯ μμ€ν )
μ μΆλ ₯ λ¨μ : κ³ μ κΈΈμ΄μ page λ¨μλ‘ diskμ μ½κ±°λ μ΄λ€.
μ μ₯ κ³΅κ° : λΉνλ°μ± μ μ₯ μ₯μΉμΈ diskμ μ μ₯, μΌλΆλΆμ Main Memoryμ μ μ₯
- Page Buffer Manager or Buffer Manager
DBMSμ Storage Systemμ μνλ λͺ¨λ μ€ νλλ‘, Main Memoryμ μ μ§νλ νμ΄μ§λ₯Ό κ΄λ¦¬νλ λͺ¨λ
Buffer κ΄λ¦¬ μ μ± μ λ°λΌ, UNDO 볡ꡬμ REDO λ³΅κ΅¬κ° μꡬλκ±°λ κ·Έλ μ§ μκ² λλ―λ‘, transaction κ΄λ¦¬μ λ§€μ° μ€μν κ²°μ μ κ°μ Έμ¨λ€.
- UNDO
νμν μ΄μ : μμ λ Pageλ€μ΄ **Buffer κ΅μ²΄ μκ³ λ¦¬μ¦μ λ°λΌμ λμ€ν¬μ μΆλ ₯**λ μ μμ. Buffer κ΅μ²΄λ transactionκ³Όλ 무κ΄νκ² bufferμ μνμ λ°λΌμ, κ²°μ λ¨. μ΄λ‘ μΈν΄, μ μμ μΌλ‘ μ’ λ£λμ§ μμ transactionμ΄ λ³κ²½ν pageλ€μ μμ 볡ꡬ λμ΄μΌ νλλ°, μ΄ λ³΅κ΅¬λ₯Ό undoλΌκ³ ν¨.
2κ°μ μ μ± (μμ λ νμ΄μ§λ₯Ό λμ€ν¬μ μ°λ μμ μΌλ‘ λΆλ₯)
steal : μμ λ νμ΄μ§λ₯Ό μΈμ λ μ§ λμ€ν¬μ μΈ μ μλ μ μ±
- λλΆλΆμ DBMSκ° μ±ννλ Buffer κ΄λ¦¬ μ μ±
- UNDO loggingκ³Ό 볡ꡬλ₯Ό νμλ‘ ν¨.
Β¬steal : μμ λ νμ΄μ§λ€μ EOT (End Of Transaction)κΉμ§λ λ²νΌμ μ μ§νλ μ μ±
- UNDO μμ μ΄ νμνμ§ μμ§λ§, λ§€μ° ν° λ©λͺ¨λ¦¬ λ²νΌκ° νμν¨.
- REDO
μ΄λ―Έ commitν transactionμ μμ μ μ¬λ°μνλ 볡ꡬ μμ
Buffer κ΄λ¦¬ μ μ± μ μν₯μ λ°μ
Transactionμ΄ μ’ λ£λλ μμ μ ν΄λΉ transactionμ΄ μμ ν pageλ₯Ό λμ€ν¬μ μΈ κ²μΈκ° μλκ°λ‘ κΈ°μ€.
FORCE : μμ νλ λͺ¨λ νμ΄μ§λ₯Ό Transaction commit μμ μ diskμ λ°μ
transactionμ΄ commit λμμ λ μμ λ νμ΄μ§λ€μ΄ disk μμ λ°μλλ―λ‘ redo νμ μμ.
Β¬FORCE : commit μμ μ λ°μνμ§ μλ μ μ±
transactionμ΄ disk μμ dbμ λ°μλμ§ μμ μ μκΈ°μ redo λ³΅κ΅¬κ° νμ. (λλΆλΆμ DBMS μ μ± )