INTERLEAVING

동시성 문제의 시작점

하나의 SQL도 내부적으로 읽기, 계산, 쓰기, 로그 기록 단계로 나뉘며 그 사이에 다른 트랜잭션이 끼어들 수 있다.

내 트랜잭션의 단계
끼어드는 실행
커밋은 로그 기준 확정
1READ현재 행과 버전을 읽는다
2CALCULATE애플리케이션 또는 엔진이 새 값을 계산한다
3WRITE버퍼와 로그에 변경을 기록한다
4COMMIT로그를 기준으로 확정하고 데이터 페이지는 나중에 반영될 수 있다

핵심: 문제는 SQL 한 줄이 길어서가 아니라, 여러 트랜잭션의 단계가 섞일 때 불변식이 깨질 수 있다는 점이다.