MySQL 데드락 예시
왜 S-Lock를 먼저 걸고, X-Lock를 걸어야 하는가 ?
PK는 유니크 제약 보장을 위해서, DML은 레코드 존재시 S-Lock 필요
어떻게 삭제된 레코드에 대해서 Lock를 걸수 있는가 ?
- 레코드는 삭제되더라도 일정 기간동안 Deletion-mark만 설정

MySQL 데드락 감지
MySQL 데드락 처리
MySQL은 롤백이 쉬운 트랜잭션을 Victim trx로 선정
- 롤백이 쉽다 == undo 레코드가 적은 트랜잭션
Victim으로 선정된 트랜잭션은 강제 롤백 처리됨
남은 트랜잭션은 정상 처리
이러한 이유로 배치작업과 서비스 쿼리가 경합하면, 항상 배치가 살아남음
MySQL 데드락 해석 어려움
같은 쿼리여도 동일한 잠금을 사용하지 않음
레코드 뿐만아니라 레코드 간격도 잠금 대상
데드락의 모든 시점을 로깅하지 않음
잠금의 대상은 모든 인덱스 키
MySQL 데드락 해석은 매우 어렵다 !