deadlock found when trying to get lock 에러가 나는 케이스는 실제로 deadlock이 걸렸을 때,
혹은 lock을 걸고 수행하는 트랜잭션이 끝나지 않았을 때 바로 같은 row에 lock을 걸려고 할 때 나타난다.
따닥과 같은 api 중복 요청 시에도 발생했고 최근에는 SQS로 받은 event를 처리하는데 event가 연속으로 날라와서 거의 동시에 처리할 때 에러를 마주했다.
두 개의 다른 event payload가 다른 row에 대해 처리함에도 불구하고 에러를 마주했다.
로직 안의 update문에서는 인덱스를 걸지 않은 컬럼을 where절에 사용했고 따라서 row 전체에 lock을 걸어서 발생한 문제였다.
id값을 조회해서 where절에 id를 넣어주는 것으로 해결할 수 있었다.
'DB > MySQL' 카테고리의 다른 글
오랜만에 MySQL 접속하니 마주한 에러들 해결 정리 (0) | 2023.03.29 |
---|---|
case when exists (0) | 2022.03.27 |
Real MySQL 04 서버 아키텍처 (1) (0) | 2022.03.07 |