Java와 InnoDB 데드락에서 잠금 순서를 통일해야 하는 이유
Java 스레드와 InnoDB 트랜잭션에서 잠금 순서가 엇갈릴 때 생기는 deadlock과 예방·복구 방법을 비교한다.
7개의 글이 있습니다.
Java 스레드와 InnoDB 트랜잭션에서 잠금 순서가 엇갈릴 때 생기는 deadlock과 예방·복구 방법을 비교한다.
count++의 lost update를 출발점으로 synchronized, ReentrantLock, AtomicInteger와 CAS의 선택 기준을 비교한다.
SELECT 사전 확인의 경쟁 조건을 유니크 키로 막고, 예상한 DuplicateKeyException만 도메인 중복으로 처리하는 기준을 제시한다.
Java 람다의 지역변수 캡처에서 effectively final과 definite assignment가 왜 별개의 규칙인지 바이트코드와 예제로 확인한다.
일반 SELECT와 UPDATE 사이의 경쟁을 MVCC 문제와 구분하고, 변경 조건을 UPDATE에 넣어 원자적으로 판정한 이유를 설명한다.
재전송된 요청이 OPEN → OPEN도 성공으로 판정해 포인트를 두 번 차감한 원인과, 조건부 UPDATE로 한 번만 처리하게 한 방법을 보여준다.
한 트랜잭션이 행을 수정하는 동안 일반 SELECT와 locking read가 어떻게 다르게 동작하는지 InnoDB의 잠금과 MVCC로 설명한다.