[DB] κ΅μ°©μν(Dead Lock)λ?
DB κ΅μ°© μν(Dead Lock)
λ°μ΄ν°λ² μ΄μ€μμ κ΅μ°© μνλ μ¬λ¬ κ°μ νΈλμμ λ€μ΄ μ€ννμ§ λͺ»νκ³ μλ‘ λ¬΄νμ κΈ°λ€λ¦¬λ μνλ₯Ό λ§νλ€. μ¦, λ κ° μ΄μμ νΈλμμ μ΄ νΉμ μμμ lockμ νλν μ± λ€λ₯Έ νΈλμμ μ΄ μμ νκ³ μλ μ κΈμ μꡬνλ©΄ μ무리 κΈ°λ€λ €λ μν©μ΄ λ°λμ§ μμ μνμ΄λ€.
β μ΄μ체μ μμμ κ΅μ°© μνλ κ°κ°μ νλ‘μΈμ€κ° μλ‘μ μμμ μ μ νκΈ° μν΄ λκΈ°νλ©΄μ μκΈ°λ λ¬Έμ λ₯Ό λ§νλ€.
βͺοΈ κ΅μ°©μνκ° μΌμ΄λλ μν©
νΈλμμ 1μ΄ ν μ΄λΈ Bμ insertλ₯Ό νκ³ , νΈλμμ 2κ° ν μ΄λΈ Aμ insertλ₯Ό νκ³ λμ μλ‘κ° lockμ κ±Έμλ νμ insert μμ μ μλνλ€λ©΄ λ κ°μ νΈλμμ λͺ¨λ waitingμ΄ λ°μνκ³ κ΅μ°©μν(Dead Lock)μ λΉ μ§κ² λλ€.
κ΅μ°©μν ν΄κ²°λ°©λ²
- μλ°© κΈ°λ²
- ννΌ κΈ°λ²
- λκ΄μ λ³ν μ μ΄ κΈ°λ²
- λΉλ μ€μ΄κΈ° κΈ°λ²
βͺοΈ μλ°©κΈ°λ²
- κ° νΈλμμ μ΄ μ€νλκΈ° μ μ νμν λͺ¨λ μμμ lock νλ€.
- → νμν λͺ¨λ λ°μ΄ν°λ₯Ό lock ν΄μΌνλ―λ‘ λ³νμ±μ΄ λ¨μ΄μ§λ€.
- SET LOCK_TIMEOUTλ¬Έμ ν΅ν΄ μΌμ μκ°μ΄ μ§λλ©΄ 쿼리λ₯Ό μ·¨μνλ€.
- κΈ°μ‘΄μ κ΅μ°©μνμΈ λ°μ΄ν°κ° μλ€λ©΄, κ·Έ λ°μ΄ν°μ μ κ·Όνλ μΏΌλ¦¬λ§ μ·¨μνλ€,
βͺοΈ ννΌ κΈ°λ²
μμμ ν λΉν λ μκ° μ€ν¬ν(time stamp)λ₯Ό νμ©νμ¬ κ΅μ°©μνκ° μΌμ΄λμ§ μλλ‘ ννΌνλ κΈ°λ²μ΄λ€.
μλ°© κΈ°λ²μ λ¨μ λλ¬Έμ μ€μ λ‘λ ννΌ κΈ°λ²μ΄ λ§μ΄ μ¬μ©λλ€.
- Wait-Die λ°©μ
- νΈλμμ 1μ΄ νΈλμμ 2μ μν΄ μ κΈλ λ°μ΄ν°λ₯Ό μμ²ν λ νΈλμμ 1μ΄ λ¨Όμ λ€μ΄μ¨ νΈλμμ μ΄λΌλ©΄ λκΈ°(wait)νλ€.
- νΈλμμ 1μ΄ λμ€μ λ€μ΄μ¨ νΈλμμ μ΄λΌλ©΄, ν¬κΈ°(die)νκ³ λμ€μ λ€μ μμ²νλ€.
- Wound-Wait λ°©μ
- νΈλμμ 1μ΄ νΈλμμ 2λ³΄λ€ λ¨Όμ λ€μ΄μ¨ νΈλμμ μ΄λΌλ©΄, λ°μ΄ν°λ₯Ό μ μ (wound)νλ€.
- λ°λ©΄, νΈλμμ 1μ΄ νΈλμμ 2λ³΄λ€ λμ€μ λ€μ΄μ¨ νΈλμμ μ΄λΌλ©΄ λκΈ°(wait)νλ€.
βͺοΈ λκ΄μ λ³ν μ μ΄ κΈ°λ²
νΈλμμ μ΄ μ€νλλ λμμλ κ²μ¬λ₯Ό μννμ§ μκ³ , νΈλμμ μ΄ μ»€λ°λ νμ λ°μ΄ν°μ λ¬Έμ κ° μλ€λ©΄ λ‘€λ°±νλ λ°©λ²μ΄λ€.
π νλ → νμΈ → κΈ°λ‘μ λ¨κ³λ₯Ό λ°λ₯Έλ€. νμΈ λ¨κ³λ₯Ό μ±κ³΅μ μΌλ‘ κ±°μΉ νΈλμμ λ§ κΈ°λ‘ λ¨κ³λ₯Ό μνν μ μλ€.
βͺοΈ λΉλ μ€μ΄κΈ°
- νΈλμμ μ μμ£Ό 컀λ°νλ€.
- μ ν΄μ§ μμλ‘ ν μ΄λΈμ μ κ·Όνλ€.
- μ½κΈ° μ κΈ (SELECT ~ FOR UPDATE)μ μ¬μ©μ νΌνλ€.
- ν μ΄λΈ λ¨μμ lockμ νλν΄ κ°±μ μ μ§λ ¬ν νλ€. (ν ν μ΄λΈμ 볡μ νμ 볡μμ μ°κ²°μμ μμμμ΄ κ°±μ νλ©΄ κ΅μ°© μνκ° μμ£Ό λ°μνλ€. κ·Έλμ ν μ΄λΈ λ¨μμ μ κΈμ νλν΄ κ°±μ μ μ§λ ¬ν νλ©΄ λμμ±μ΄ λ¨μ΄μ§μ§λ§ κ΅μ°© μνλ₯Ό νΌν μ μλ€.)
reference
https://velog.io/@yrkim/Database-νΈλμμ -deadlock
https://jaehoney.tistory.com/162
https://www.expertsmind.com/questions/wait-die-scheme-deadlock-prevention-30141349.aspx
https://www.expertsmind.com/questions/wound-wait-scheme-deadlock-prevention-30141353.aspx