남기다
홈 › 트랜잭션과 잠금

트랜잭션과 잠금

격리 수준, 잠금, 교착 상태를 겪고 정리한 것

이 카테고리의 글 4편

재고 차감 동시성: FOR UPDATE, 조건부 UPDATE, 버전 컬럼 비교

재고가 음수가 되는 lost update를 psql 두 창으로 재현하고, SELECT FOR UPDATE, 조건부 UPDATE, 버전 컬럼 낙관적 잠금을 같은 부하에서 비교했다. 처리량, 재시도, 코드 복잡도를 기준으로 언제 무엇을 쓰는지 적었다.

트랜잭션과 잠금 ·

PostgreSQL과 MySQL의 REPEATABLE READ가 다른 이유

같은 동시 업데이트를 PostgreSQL과 MySQL의 REPEATABLE READ에서 돌려 보면 PostgreSQL은 직렬화 오류를 내고 MySQL은 최신 값 위에 덮어쓴다. 두 DB가 스냅샷을 잡는 시점도 다르다. 실험 쿼리와 함께 차이를 짚는다.

트랜잭션과 잠금 ·

InnoDB 교착 로그 읽기: LATEST DETECTED DEADLOCK

SHOW ENGINE INNODB STATUS의 교착 로그에 찍히는 lock_mode, rec but not gap, gap before rec, insert intention을 한 줄씩 풀고, 로그에 남지 않는 앞선 쿼리까지 거슬러 올라가 원인을 찾는다.

트랜잭션과 잠금 ·

없는 행에 SELECT FOR UPDATE를 걸면 MySQL이 교착되는 이유

MySQL REPEATABLE READ에서 없는 행에 SELECT ... FOR UPDATE를 걸면 두 트랜잭션이 같은 갭 락을 나눠 잡고 서로의 삽입 의도 잠금을 막는다. 재현 순서와 세 가지 해법의 장단점을 비교한다.

트랜잭션과 잠금 ·