도라지보다더덕
280
2021-06-01 23:54:13
3
131

mysql deadlock


안녕하세요. 노드 공부 중인 학생입니다.


질문이 있어 올립니다.


외부 api에서 데이터를 받아와 디비에 갱신하는 작업을 하고 있습니다.

이걸 비동기로 동작시키면 빠르게 동작할것이라고 예상하고 비동기로 빠르게 동작시키는 코드를 구현했는데

데드락이 발생해 질문드립니다.

빠르게 266개 정도 네트워크로 요청하고 이를 각각 디비에 넣었는데 데드락 문제를 어떻게 해결 할 수 있을까요?


node.js 와 sequelize 사용 중입니다. 

0
  • 답변 3

  • 캐티
    5k
    2021-06-02 08:49:22

    그냥 머 데드락은 일케 생기빈다.
    https://stackoverflow.com/a/22825825

    트랜젝션이 걸리면 서로 교차해서 업데이트를 할때 교착상태가 되저. 글머 터지는  원리이빈다.

    서로 영구적으로 기다리므로 이렇게 될 여지가 잇다면 타임아웃을 걸어서 중단 하게 하여야 할 것입니다.

  • __jj__
    669
    2021-06-02 10:55:41

    보통 한 트랜잭션 안에서 read 후 write하는 로직이 멀티 로 동작할때 트랜잭션간 서로 트랜잭션이 끝나길 기다리는 상황에서 발생합니다. 이걸 피하려면 트랜잭션 안에서 DB read 부분과 write 사이에 시간을 delay 시키는 포인트가 있다면 이걸 최소화 시켜주어야 합니다. 

    또는 read와 write 가 같이 있지 않거나, read, write 사이 시간 딜레이는 적으나 update 량이 많아서 쿼리 자체에서 시간이 오래 걸리는 경우도 있습니다. 이때는 update 수를 잘게 조개서 중간 중간 commit을 날려 lock을 짧게 잘라 해제 시켜주는 것으로 해결하기도 합니다.

  • 도라지보다더덕
    280
    2021-06-04 12:46:40

    두분다 감사합니다!

  • 로그인을 하시면 답변을 등록할 수 있습니다.