DB

[DB] κ΅μ°©μƒνƒœ(Dead Lock)λž€?

DAHLIA CHOI 2024. 1. 18. 15:32

 

DB ꡐ착 μƒνƒœ(Dead Lock)

λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ꡐ착 μƒνƒœλŠ” μ—¬λŸ¬ 개의 νŠΈλžœμž­μ…˜λ“€μ΄ μ‹€ν–‰ν•˜μ§€ λͺ»ν•˜κ³  μ„œλ‘œ λ¬΄ν•œμ • κΈ°λ‹€λ¦¬λŠ” μƒνƒœλ₯Ό λ§ν•œλ‹€. 즉, 두 개 μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ νŠΉμ • μžμ›μ˜ lock을 νšλ“ν•œ 채 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ μ†Œμœ ν•˜κ³  μžˆλŠ” μž κΈˆμ„ μš”κ΅¬ν•˜λ©΄ 아무리 기닀렀도 상황이 λ°”λ€Œμ§€ μ•Šμ€ μƒνƒœμ΄λ‹€.

βž• μš΄μ˜μ²΄μ œμ—μ„œμ˜ ꡐ착 μƒνƒœλŠ” 각각의 ν”„λ‘œμ„ΈμŠ€κ°€ μ„œλ‘œμ˜ μžμ›μ„ μ μœ ν•˜κΈ° μœ„ν•΄ λŒ€κΈ°ν•˜λ©΄μ„œ μƒκΈ°λŠ” 문제λ₯Ό λ§ν•œλ‹€.

 

β–ͺ️ κ΅μ°©μƒνƒœκ°€ μΌμ–΄λ‚˜λŠ” 상황

νŠΈλžœμž­μ…˜ 1이 ν…Œμ΄λΈ” B에 insertλ₯Ό ν•˜κ³ , νŠΈλžœμž­μ…˜ 2κ°€ ν…Œμ΄λΈ” A에 insertλ₯Ό ν•˜κ³  λ‚˜μ„œ μ„œλ‘œκ°€ lock을 κ±Έμ—ˆλ˜ 행에 insert μž‘μ—…μ„ μ‹œλ„ν•œλ‹€λ©΄ 두 개의 νŠΈλžœμž­μ…˜ λͺ¨λ‘ waiting이 λ°œμƒν•˜κ³  κ΅μ°©μƒνƒœ(Dead Lock)에 λΉ μ§€κ²Œ λœλ‹€.

 

κ΅μ°©μƒνƒœ 해결방법

  • 예방 기법
  • νšŒν”Ό 기법
  • 낙관적 병행 μ œμ–΄ 기법
  • λΉˆλ„ 쀄이기 기법

 

β–ͺ️ μ˜ˆλ°©κΈ°λ²•

  1. 각 νŠΈλžœμž­μ…˜μ΄ μ‹€ν–‰λ˜κΈ° 전에 ν•„μš”ν•œ λͺ¨λ“  μžμ›μ„ lock ν•œλ‹€.
  2. → ν•„μš”ν•œ λͺ¨λ“  데이터λ₯Ό lock ν•΄μ•Όν•˜λ―€λ‘œ 병행성이 떨어진닀.
  3. SET LOCK_TIMEOUT문을 톡해 일정 μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ 쿼리λ₯Ό μ·¨μ†Œν•œλ‹€.
    • 기쑴의 κ΅μ°©μƒνƒœμΈ 데이터가 μžˆλ‹€λ©΄, κ·Έ 데이터에 μ ‘κ·Όν•˜λŠ” 쿼리만 μ·¨μ†Œν•œλ‹€,
    → 근본적인 해결책이 될 수 μ—†λ‹€.

 

β–ͺ️ νšŒν”Ό 기법

μžμ›μ„ ν• λ‹Ήν•  λ•Œ μ‹œκ°„ μŠ€νƒ¬ν”„(time stamp)λ₯Ό ν™œμš©ν•˜μ—¬ κ΅μ°©μƒνƒœκ°€ μΌμ–΄λ‚˜μ§€ μ•Šλ„λ‘ νšŒν”Όν•˜λŠ” 기법이닀.

예방 κΈ°λ²•μ˜ 단점 λ•Œλ¬Έμ— μ‹€μ œλ‘œλŠ” νšŒν”Ό 기법이 많이 μ‚¬μš©λœλ‹€.

  1. Wait-Die 방식 
    • νŠΈλžœμž­μ…˜ 1이 νŠΈλžœμž­μ…˜ 2에 μ˜ν•΄ 잠금된 데이터λ₯Ό μš”μ²­ν•  λ•Œ νŠΈλžœμž­μ…˜ 1이 λ¨Όμ € λ“€μ–΄μ˜¨ νŠΈλžœμž­μ…˜μ΄λΌλ©΄ λŒ€κΈ°(wait)ν•œλ‹€.
    • νŠΈλžœμž­μ…˜ 1이 λ‚˜μ€‘μ— λ“€μ–΄μ˜¨ νŠΈλžœμž­μ…˜μ΄λΌλ©΄, 포기(die)ν•˜κ³  λ‚˜μ€‘μ— λ‹€μ‹œ μš”μ²­ν•œλ‹€.
  2. 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