Interleaving

동시성 문제는 읽기와 쓰기 사이의 빈틈에 끼어든다

한 SQL 문 안에서는 안전해 보여도, 애플리케이션이 읽고 계산한 뒤 나중에 쓰면 그 사이에 다른 트랜잭션이 값을 바꿀 수 있다.

1 READ

T1이 현재 값 100을 읽는다.

2 다른 트랜잭션 개입

T2도 같은 100을 읽거나 먼저 갱신한다.

3 CALCULATE

각 트랜잭션이 자기 애플리케이션에서 새 값을 계산한다.

4 WRITE

나중에 쓴 절대값이 먼저 쓴 결과를 덮을 수 있다.

원인

읽기와 쓰기가 하나의 보호된 작업으로 묶이지 않았다.

위험

테스트에서는 드물고 운영의 타이밍에서 터진다.

대응

잠금, 원자적 UPDATE, 버전 검사를 사용한다.