20230807_deadlock
κ΅μ°© μνλ? λ무μν€μμ μλ €μ£ΌκΈΈ, "λ κ° μ΄μμ μμ μ΄ μλ‘ μλλ°©μ μμ μ΄ λλκΈ° λ§μ κΈ°λ€λ¦¬κ³ μκΈ° λλ¬Έμ μ΄λ»κ²λ κ²°λ‘ μ΄ λμ§ μλ μν"λ₯Ό μλ―Ένλ€ ν΄λΉ μν©μ΄ λ°μν μ μλ μν©μ μλμ κ°λ€
λΉμ μ > μ§μμ μ μ νμ§ μμ
ννλκΈ° > μνμΌλ‘ μμμ λκΈ° μ€
μνΈλ°°μ > μμμ νλμ νλ‘μΈμ€λ§ μ μ κ°λ₯
μ μ λκΈ° > μμμ κ³ μ λ²νΈ ν λΉ ν μμλλ‘ μμ
μ΄λ κ² λλΉμμ νΈλμμ (μμ λ¨μ)κ° κ΅μ°©μνλ‘ λμ΄μλ μν©μμ μ€λΌν΄μ κ΅μ°©μνμΈ μν©μ νμΈνκ³ , μ€λΌν΄μ΄ μμ ORA-00060 μ λ±μΌλ©΄μ κ΅μ°©μνλ₯Ό νμ΄μ£Όκ² λλ€ λ°±μλ μλ²μμ λ°μνλ κ΅μ°©μνλ©΄ μμ λλΉμ κ±Έλ €μλ λ½κ³Ό κ΄λ ¨μμ κ²μ΄λΌκ³ μμμ νκ³ λλΉμμ λ½μ κ±°λ μΌμ΄μ€λ ν¬κ² 2κ°μ§κ° μλ κ²μΌλ‘ μκ³ μλ€ @Lock μ ν΅ν΄μ μ‘°ν μ, for update λ¬Έμ λ 리λ μΌμ΄μ€ / νΉμ λ‘μ°μ λν update λ¬Έμ΄ λ λΌκ°λ μΌμ΄μ€
μ°μ μ΄λ²μ ν΄λΉ μ΄μκ° λ°μν νλ‘μ νΈμμλ @Lock μ ν΅ν΄μ λ½μ κ±Έκ³ μ²λ¦¬νλ λ°©μμ λ³λ‘ λ§μ§ μμκΈ°μ κ·Έλ κ² μμ² μμ¬κ°λκ² μμ§λ μμλ€ κ·Έλ κ² νμΈν΄λ³΄λ @Lock μ ν΅ν΄μ λκ°λ μ¬ν μ체λ λ°λ‘ μμλ€ λ€μμΌλ‘λ κ·ΈλΌ ν΄λΉ μλ¬κ° λ°μν μμ μ λμκ°κ³ μλ νΈλμμ λ€μ μ νμΈνλ€ μ ννκ²λ μλ¬κ° λ°μν λ‘μ§μμ λλΉμ insert/update μΉλ κ²λ€μ΄ μλμ§ νμΈ, νΈλμμ μμμ μΈμ ν΄λΉ μΏΌλ¦¬κ° λλΉμ λ μκ°λμ§ νμΈνλ€ κ·Έλ¦¬κ³ λλΉμ update, insert λ¬Έμ΄ λ μκ°λ μΌμ΄μ€μμ μ΄λ»κ² κ΅μ°©μνκ° μμ±λμλμ§ κ³ λ―Όν΄λ΄€λ€ <br
μμμ΄ κ°λ λ κ°μ§ μΌμ΄μ€λ μ΄μ κ°λ€ λ νΈλμμ μ΄ μλ‘ νλμ λ‘μ°λ₯Ό μ λ°μ΄νΈνκΈ° μν΄μ κ°κ°μ΄ λ½μ μ‘μ μνμμ μΆκ°μ μΌλ‘ ν΄λΉ λ‘μ°μ λ½μ μ‘μΌλ €λ μΏΌλ¦¬κ° λ€μ΄μ€λ μΌμ΄μ€ λ νΈλμμ μ΄ λ‘μ° A, B λ₯Ό μνμ μΌλ‘ λ½μ μ‘κ³ μλ μν© - T1μμ Aλ₯Ό λ¨Όμ κ±Έκ³ , T2μμ Bλ₯Ό λ¨Όμ κ±Έκ³ , T1μμ Bλ₯Ό κ±Έλ €κ³ νκ³ , T2μμ Aλ₯Ό κ±Έλ €λ μΌμ΄μ€ >κ΅μ°©μνλ₯Ό μλ² λ‘κ·Έλ¨μμ νμΈνκΈ° μν΄μλ deadlock μ΄ λ°μνκ²λ νΉμ λ‘μ°λ₯Ό μ°Ύκ³ > ν΄λΉ λ‘μ°λ₯Ό μ λ°μ΄νΈνλ 쿼리λ€κ³Ό κ·Έ νΈλμμ μ λ²μλ₯Ό ꡬ체ν μ°Ύκ³ > μ€μ λ‘κ·Έλ₯Ό λ΄€μ λ μ΄λ μμ μ μΏΌλ¦¬κ° μλ²λ‘λΆν° λλΉλ‘ λ μκ°λμ§ νμΈ μλ²μ λ‘κ·Έλ₯Ό κΈ°λ°μΌλ‘ ν΄λΉ νΈλμμ μ μμλ₯Ό κ·Έλ €κ°λ³΄λ©΄μ μ΄λ€ κ΅μ°©μνμΈμ§μ λν΄μ νμ μ΄ νμνλ€
μν©μ μ΄λ¬νλ€ μ¬μ©μλ³λ‘ νΉμ 리μλμ μ§κΈ κ°―μλ₯Ό ν΅κ³λ‘μ¨ μ μ₯νλ κ²½μ°μΈλ°, νΉμ μ΄λ²€νΈμ μ°κ²°λμ΄ μλ 리μλλ₯Ό κ°μ Έμ€λ κ³Όμ μμ κ°μ 리μλλ€μ κ°μ Έμ€λλ°, μ΄λ²€νΈκ° λμμ λ€μ΄μ¨ μν©μμ λ μ΄λ²€νΈκ° 리μλ€λ₯΄ κ°μ Έμ¬ λ λμΌν μμλ₯Ό 보μ₯ν΄μ λ€μ΄μ€λ μΌμ΄μ€κ° μλλΌ λ λ€ μμλ₯Ό μκΈ° λ©λλ‘ μ€μ ν΄μ 리μλλ³λ‘ λ‘μ§μ΄ λμκ°κΈ° λλ¬Έμ κ΅μ°©μνμ λ λ²μ§Έ μν©μ΄ λ°μν κ²μ΄λ€
μ΄κ²μ ν΄κ²°λ°©μμΌλ‘λ μ°μ μμλ₯Ό 보μ₯νλκ² κ°μ₯ μ’μ κ²μ΄λΌκ³ μκ°μ΄ λ€μλ€, κ·Έλ°λ° μμλ₯Ό 보μ₯νλ λ°©λ²μ λν΄μ κ³ λ―Όν΄λ³΄μλ, MQλ₯Ό μ¬μ©ν΄μ μμλ₯Ό 보μ₯μν€λ λ°©λ²μ΄ μλ€κ³ μκ°νλ€ κ·Έλ°λ° κ·Έλ κ² νκΈ°μλ λ무 λ§μ μ½λλ₯Ό λ€μ΄ μμ΄μΌ νλ μ΄μκ° μκΈ°μ κ·Έλ₯ λ°©λ² μ€ νλλΌκ³ λ§ μΈμ§νκ³ λμ΄κ°λ €κ³ νλ€
μ΄λ²μ μ μ©ν λ°©λ²μ κ·Έλμ λ½μ λ²μλ₯Ό λλ €μ£Όλ λ°©μμΌλ‘ μ²λ¦¬νλ€ κ΅μ°©μνκ° λ°μν μμΈμ 2κ°μ νΈλμμ μμ μνμ μΌλ‘ 2κ°μ λ‘μ°λ₯Ό μ λ°μ΄νΈνλ €κ³ νκΈ°μ λ°μν μν©μ΄λΌκ³ νλλ° ν΄λΉ μν©μ λ νΈλμμ μ΄ κ±°μ λμμ(0.094μ΄μΈκ°..)μ κ°μ΄ 컀λ°λμκ³ μ λ°μ΄νΈ μΉλ μκ°μ λ½μ΄ μ‘νμ λ¬Έμ μμΌλ, select for update λ¬Έμ ν΅ν΄μ λ½μ μκ°μ κΈΈκ² λλ €μ£Όκ³ , νΈλμμ μ λΆλ¦¬ν¨μΌλ‘μ¨ μ²λ¦¬νλ €κ³ νλ€
μ΄λ κ² κΉμ§ν΄μ£Όλ©΄ μ°λ €νκ³ μμλ κ΅μ°©μνμ λν μ²λ¦¬λ ν΄μλλ κ²μ ν μ€νΈ μ½λλ₯Ό ν΅ν΄μ νμΈνλλ° μΆκ°μ μΈ λ¬Έμ κ° μμλ€ >> μ΄μλ νΈλμμ μ λΆλ¦¬νλ©΄μ λ°μν μ΄μμΈλ°, κΈ°μ‘΄μ ν μ€νΈ μ½λ μ€μμ ν΅κ³ λ‘μ§μ΄ μνλκ³ λμ ν΄λΉ ν΅κ³ λ°μ΄ν°λ₯Ό μ¬μ©νλ λΆλΆμ κ²μ¦νλ μ½λκ° μμλ€ μμ λ μ¬νμΌλ‘λ νΈλμμ μ REQUIRES_NEW μ ν΅ν΄μ μ²λ¦¬ν΄λ μν©μ΄κ³ , 루νλ₯Ό λλ μν©μμ μ μ μ‘°νν΄λμλ(μλ‘μ΄ νΈλμμ μμ μ λ°μ΄νΈμΉ λ‘μ°)λ₯Ό λλΉλ‘λΆν° μ‘°νν΄μμ μ¬μ©νλ κ²μ΄ μλλΌ jpa μμ μ 곡ν΄μ£Όλ μΊμ±μ ν΅ν΄μ μ²λ¦¬νλ€λ μ μ΄λ€ μ€μ λ‘ jpa μμ μ°λ¦¬κ° νν μκ³ μλ μμμ± μ»¨ν μ€νΈλ κ° νΈλμμ λ³λ‘ μμ±λκ³ κ΄λ¦¬λλ€ > νΉμ λ‘μ°λ₯Ό νΈλμμ Aμμ λ¨Όμ μ‘°νν΄λ λ€μ, ν΄λΉ λ‘μ°λ₯Ό Bμμ μμ νλ€κ³ ν΄μ νΈλμμ Aλ νΈλμμ Bμμμ μμ μ¬νμ λ°λ‘ μ λ°μ΄νΈλμ΄ κ°μ§κ³ μμ§ μλλ€λ κ²μ΄μλ€ λ§μ½μ ν΄λΉ μΌμ΄μ€ κ°μ κ²½μ°μλ λ λ°©λ²μ λͺ κ°μ§κ° μ‘΄μ¬ν κ²μ΄λ€ νΈλμμ μ΄ λΆλ¦¬λμ΄μ λ‘μ§μ΄ λμκ°λ μΌμ΄μ€μλ ν΄λΉ λ‘μ°λ₯Ό μ‘°νν λ λ€μ΄ν°λΈ 쿼리λ₯Ό ν΅ν΄μ μ²λ¦¬νλ€λκ°, μλ‘μ΄ νΈλμμ μμ μ²λ¦¬ν κ°μ 리ν΄νμ¬ λΆλͺ¨ νΈλμμ μμλ λ³κ²½λ κ°μ λΆλͺ¨μμλ μ μ₯ν΄μ μμμ±μ λ£μ΄μ£Όλ λ°©λ² μ΄μ μ΄λ€ λ°©μμ κ°μ§κ³ μ§νν κΉ κ³ λ―Όνλ λμ€μ νμΈν΄λ³΄λ μ¬μ€ λ‘μ§μμλ κ·Έλ κ² ν΅κ³μΉλ₯Ό μμ λΆλΆμ λ°μ΄ν°λ₯Ό λΆλͺ¨ νΈλμμ μμ μ¬μ©νλ μΌμ΄μ€κ° μλ κ²μ μλμλ€..! μ€μ λ‘μ§μ κ³μ λ€μ¬λ€λ΄λ λκ° μ΄μν΄μ ν μ€νΈ μ½λλ₯Ό λ΄λ³΄λ.. μλ μ ν μ€νΈμ½λ μμλ€κ° @Transactional μ λΆνλμ ν μ€νΈ μ½λ μμ²΄κ° λ¬Άμ¬μ λμνκ³ μμλ κ²μ΄λ€ κ·Έλμ μκΎΈ μ λ°μ΄νΈλμ§ μμ κ°μ κ°μ§κ³ κ²μ¦μ μ§ννλ μλ¬κ° λ μλ°μ.. κ²°λ‘ μΌλ‘λ κ·Έλμ νλ λ°°μ λ€ μκ°νκ³ @Transactional μΌλ‘ λ¬Άμ¬μλ ν μ€νΈμ½λλ₯Ό λΆλ¦¬νλ μμ μ μ§ννμλ€
λλμ .. λ°±μλ κ°λ°μλ‘μ¨ μ΄μ λ¬Έμ μ¬νλ€μ νλνλ νμ νκ³ μ²λ¦¬ν΄κ°λ κ³Όμ μ κ²ͺλλ° μ¬μ ν 곡λΆκ° λ§μ΄ νμνκ³ , λ΄κ° μκ³ μμλ€κ³ μκ°ν κ²λ€μ΄ 100%κ° μλ μΌμ΄μ€λ μλλΌ.. λ§μ μ μΈλ€κ³Ό λ€λ₯Έ κ°λ°μλ€κ³Όλ μ΄μμ λν΄μ 곡μ νκ³ μλ‘μ μ§μμ 곡μ νλ©° λ λμ λ°©ν₯μ μν΄μ κ³ λ―Όνλ κ²λ κ΅μ₯μ΄ μ€μνλ€κ³ μκ°μ΄ λ λ€
Last updated
Was this helpful?