공통 MVCC 상황

MVCC는 버전을 같이 보관하고, 격리 수준은 어느 시점을 계속 읽을지 정합니다.

T1이 먼저 시작한 뒤 T2가 값을 100 → 200으로 바꾸고 커밋합니다. 이후 T1의 SELECT는 같은 버전 체인을 보더라도 snapshot 유지 범위에 따라 다른 값을 읽습니다.

이전 버전 100 T1이 시작한 A 시점의 snapshot이 가리키는 값
T2 갱신 후 커밋
최신 커밋 버전 200 T2 커밋 이후 B 시점에서 선택 가능한 최신 값
격리 수준이 갈라놓는 기준 SELECT가 매번 새 snapshot을 잡는가, 아니면 처음 snapshot을 유지하는가

핵심 차이는 데이터 저장 방식이 아니라 읽기 기준점입니다. 같은 MVCC 버전 체인 위에서 격리 수준마다 멈추는 위치가 달라집니다.

문장마다 다시 선택
같은 MVCC 기반
트랜잭션 동안 유지
READ COMMITTED B 시점의 최신 커밋을 다시 본다

각 SELECT가 그 순간 커밋 완료된 버전 중 가장 최신 값을 기준으로 읽습니다.

snapshot 유지 범위 문장(statement) 단위
T1이 B 시점 SELECT에서 읽는 값 200
REPEATABLE READ A 시점에 잡은 snapshot을 끝까지 유지한다

트랜잭션 시작 시점에 보이던 버전이 고정되므로 같은 행을 다시 읽어도 기준점이 바뀌지 않습니다.

snapshot 유지 범위 트랜잭션 단위
T1이 B 시점 SELECT에서 읽는 값 100
정리: MVCC는 여러 버전을 제공하는 공통 기반이고, 격리 수준은 그 버전 중 언제의 시점을 계속 볼지를 결정합니다.