2024. 2. 25. 21:28γDatabase/DB μ€ν°λ
μ΄λ² κΈμμλ MVCCμ κ°λ κ³Ό μ΄λ»κ² λμνλ κ²μΈμ§, κ·Έλ¦¬κ³ νΈλμμ 격리μμ€μ ꡬνν λ μ΄λ₯Ό μ΄λ»κ² νμ©νκ³ μλμ§μ λν΄ κ°μ₯ λ§μ΄ μ°μ΄λ λ°μ΄ν°λ² μ΄μ€ μ€ νλμΈ Mysqlμ ν΅ν΄ μ 리νκ³ μ νλ€.
λ€μ΄κ°κΈ° μμ
μ΄λ² κΈμμ μ€μ μ μΌλ‘ λ€λ£¨κ² λ MVCC μ£Όμ λ‘ λ€μ΄κ°κΈ° μ μ, λ¨Όμ νΈλμμ 격리μμ€μ λν λ°°κ²½μ§μμ΄ νμνλ€.
νΈλμμ 격리μμ€μ΄λ, λ°μ΄ν°λ² μ΄μ€ λ΄μμ νΈλμμ λ€μ΄ λμλ€λ°μ μΌλ‘ μ€νλ λ ν΄λΉ νΈλμμ μ μ‘°ν κ²°κ³Όκ° λ€λ₯Έ νΈλμμ μ μΌλ§λ μν₯μ λ°κ²ν μ§μ λν μμ€μ μλ―Ένλ€.
READ UNCOMMITED, READ COMMITED, REPEATABLE READ, SERIALIZABLEμ μ΄ 4κ°μ§ μμ€μΌλ‘ ꡬμ±λκ³ μΈκΈν μμμ μμμΌλ‘ 격리 μμ€μ΄ λμμ§λ€. (READ UNCOMMITED -> ... -> SERIALIZABLE)
κ° κ²©λ¦¬μμ€μ λν μ 보μ κ·Έμ μ°κ΄λ λ¬Έμ λ€μ μμ μ μμ±ν΄λ ν¬μ€νΈκ° μκΈ° λλ¬Έμ λ§ν¬λ‘ λ체νκ² λ€.
MVCC
κ°λ
MVCCλ Multi Version Concurrency Controlμ μ½μλ‘, μ§μνμλ©΄ λ€μ€ λ²μ λμμ± μ μ΄ μ―€μ΄ λλ€.
λ€μ€ λ²μ μ΄λΌλ λ§μλ κ·Έ λμμ΄ λλ μ£Όμ΄κ° λΉ μ Έμλλ°, μ¬κΈ°μμ λ€μ€ λ²μ μ ν΅ν΄ κ΄λ¦¬λλ 주체λ λ°λ‘ DB λ μ½λμ΄λ€.
μ¦, DBλ νλμ λ μ½λμ λν΄ λ΄λΆμ μΌλ‘ μ¬λ¬ λ²μ μ κ΄λ¦¬νκ³ μλ€λ κ²μ μ μ μλ€.
μ¬μ© μ΄μ
κ·Έλ λ€λ©΄ DBλ μ κ° λ μ½λμ λν΄ μ¬λ¬ λ²μ μ κ΄λ¦¬νλ κ²μΌκΉ?
Mysql 곡μλ¬Έμμ λ°λ₯΄λ©΄ κ·Έ μ΄μ λ μλμ κ°λ€.
Mysql InnoDBλ λμμ±, λ‘€λ°±κ³Ό κ°μ νΈλμμ κΈ°λ₯λ€μ μ§μνκΈ° μν΄ "λ©ν° λ²μ λ"μ μ§μν©λλ€.
νΈλμμ μ΄ μ’ λ£λλ λ°©μμ ν¬κ² 컀λ°κ³Ό λ‘€λ°±μ΄ μ‘΄μ¬νλλ°, μ΄ μ€ λ‘€λ°±μ μν΄μλ νΉμ λ μ½λκ° νΈλμμ μ μν΄ μμ λκΈ° μ λ°μ΄ν°λ₯Ό μκ³ μμ΄μΌ νλ€. λ°λΌμ νΉμ λ μ½λμ λ²μ μ κ΄λ¦¬νλ μ΄μ λ‘λ νλΉνλ€. (μ΄λ μ¬μ€ μΈλ λ‘κ·Έμ λν μ€λͺ μ΄κΈ°λ νλ€.)
κ·Έλ λ€λ©΄ λμμ±μ μ΄λ¨κΉ? μ¬κΈ°μμλ λ¨μν 'λμμ±'μΌλ‘ μΈκΈλμ΄ μμ§λ§, λ ꡬ체μ μΌλ‘λ μ¬λ¬ νΈλμμ μ΄ λμμ λμνλ μν©μμλ λ°μ΄ν°μ μΌκ΄μ±μ μ μ§νλ κ²μ μλ―Ένλ€κ³ 보면 λλ€. μ΄λ₯Ό ꡬννλ κ°μ₯ λ¨μν λ°©λ²μ λ°λ‘ λ½μ μ¬μ©νλ κ²μ΄μ§λ§, λ§€λ² λ½μ νμ©νκ² λ κ²½μ° DBμ μ±λ₯μ΄ κ²°μ½ μ’μ μ μλ€. μ΄λ₯Ό μν΄ DBκ° λ μ½λ λ³λ‘ μ¬λ¬ λ²μ μ κ΄λ¦¬νκ³ , κ° νΈλμμ μμ μ‘°νλ₯Ό μνν λ μ μ ν λ²μ μ λ μ½λλ₯Ό μ½κ²λ§ ν μ μλ€λ©΄ λ½μ νμ©νμ§ μμΌλ©΄μλ λ°μ΄ν° μ‘°νμ μΌκ΄μ±μ μ μ§ν μ μλ€.
μ¦, MVCCλ μ΄ λ²μ λ€μ νμ©νμ¬ λμλ€λ°μ μΌλ‘ μ€νλλ νΈλμμ μμλ μ‘°νλ₯Ό μν λ½μ νλνμ§ μλ λ°©ν₯μΌλ‘ νΈλμμ 격리μμ€μ ꡬννλ€κ³ λ³Ό μ μλ€.
λμ λ°©μ
MVCCλ DBμ μΈλ λ‘κ·Έμ νΈλμμ ID(trx_id)λ₯Ό ν΅ν΄ ꡬνλλ€.
μ¬κΈ°μ νΈλμμ IDλ Mysqlμ΄ κ° νΈλμμ μ λΆμ¬νλ κ³μν΄μ μ¦κ°νλ κ°μ μλ―Ένλλ°, Mysqlμ ν΄λΉ νλλ₯Ό λ΄λΆμ μΌλ‘ μ μ§νλ μΈλΆλ‘ λ ΈμΆνμ§λ μλ λ°©μμΌλ‘ μ΄λ₯Ό κ΄λ¦¬νλ€.
MVCCμ λμ λ°©μμ μ΄ν΄νκΈ° μν΄ νΉμ λ μ½λμ μ κ·Όνμ¬ μΉΌλΌ κ°μ μμ (value: 10 -> 20)νλ νΈλμμ (A)κ³Ό μ΄λ₯Ό μ‘°ννλ νΈλμμ (B)μ΄ λμμ μ€νλλ μν©μ μκ°ν΄λ³΄μ.
μ΄ λ κ° νΈλμμ μ μμ μμλ μλμ κ°λ€κ³ κ°μ νμ.
- λμ λ μ½λ μ‘΄μ¬ (trx_id: 5, value: 10)
- A νΈλμμ μμ (trx_id: 10)
- A νΈλμμ μμ μν(value: 10 -> 20)
- B νΈλμμ μμ (trx_id: 11)
- B νΈλμμ μμ μν(λ μ½λ μ‘°ν)
- B νΈλμμ 컀λ°
- A νΈλμμ 컀λ°
μ μν©μμ 2λ² μμ μ΄ μνλλ μ§ν λ²νΌ μΊμμ λ°μ΄ν°λ 20μΌλ‘ μμ λκ³ ν΄λΉ λ μ½λμ trx_id κ°μ 10μ΄ λλ€. κ·Έλ¦¬κ³ κΈ°μ‘΄ κ°μ μΈλ λ‘κ·Έμ μ μ₯λλ€. (value: 10, trx_id: 5)
κ·Έ λ€μ B νΈλμμ μ΄ μμλκ³ ν΄λΉ λ μ½λλ₯Ό μ½κ² λλ€.
μ΄ λ νΈλμμ 격리 μμ€μ λ°λΌ λμμ΄ λ¬λΌμ§κ² λλλ°, READ COMMITEDμ REPEATABLE READμ κ²½μ°μ μΈλ λ‘κ·Έλ₯Ό νμ©νμ¬ μ»€λ°λ λ°μ΄ν° λ§μ μ½μ΄λ΄λ λ°λ©΄ READ UNCOMMITEDλ μμ§ μ»€λ°λμ§ μμ λ μ½λλ₯Ό 곧λ°λ‘ μ½κ³ , SERIALIZABLEμ μΈλ λ‘κ·Έ λμ λ½μ νμ©νλ€.
μ¦ MVCC λ°©μμ READ COMMITED, REPEATABLE READμλ§ ν΄λΉνλ€.
READ COMMITED vs REPEATABLE READ
λ€λ§, λ 격리 μμ€μ΄ MVCCλ₯Ό νμ©νλ λ°©λ²μλ μμ°ν μ°¨μ΄κ° μ‘΄μ¬νλ€.
μ°μ REPEATABLE READμ κ²½μ°μλ, λ²νΌ μΊμμ λ μ½λμ μΈλ λ‘κ·Έμ λ μ½λ μ€ μμ μ νΈλμμ ID κ°λ³΄λ€ μμ λ μ½λ μ€ κ°μ₯ ν° λ°μ΄ν°λ₯Ό μ½λλ€. νΈλμμ IDλ νλμ νΈλμμ μμμλ λ³κ²½λμ§ μκΈ° λλ¬Έμ, ν΄λΉ 격리 μμ€μμλ μΌμ ν μ€λ μ·μ νλν μ μλ€.
READ COMMITEDμ κ²½μ°μ μ‘°κΈ λ€λ₯΄λ€. λ²νΌ μΊμμ λ μ½λμ μΈλ λ‘κ·Έμ λ μ½λ μ€ κ°μ₯ μ΅κ·Όμ 컀λ°λ λ°μ΄ν°λ₯Ό μ½λλ€. μ΄λ‘ μΈν΄ ν΄λΉ 격리 μμ€μμλ SELECTλ₯Ό μ¬λ¬λ² μνν΄λ, μ‘°ν μ¬μ΄μ¬μ΄μ λ€λ₯Έ νΈλμμ μ UPDATE 컀λ°μ΄ μλ€λ©΄ λ§€λ² μ½κ² λλ λ°μ΄ν°κ° λ¬λΌμ§λ κ²μ΄λ€. (μ΄λ₯Ό NON-REPEATABLE READ λ¬Έμ λΌκ³ λΆλ₯Έλ€.)
μ°Έμ‘°
'Database > DB μ€ν°λ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Exists μ°μ°μμ λν΄μ (SQL) (0) | 2024.02.12 |
---|---|
μλΈ μΏΌλ¦¬μ μ±λ₯μ λν μ€ν΄ (1) | 2024.01.21 |
SGA vs PGA (in Oracle) (1) | 2024.01.14 |
λ³΅ν© μΈλ±μ€ νμ© κ²½μ°μ μ (1) | 2023.12.31 |
λ±νΈ μ°μ°μμ LIKE μ°μ°μ κ° λΉκ΅ (1) | 2023.12.17 |