공통 시작 상태
같은 행을 보는 순간, 읽기는 어디서 값을 가져오는가?
T1이 값을 바꾸는 동안 T2가 같은 행을 읽으려는 장면입니다. 차이는 접근을 막는지, 아니면 버전을 나눠 읽는지에 있습니다.
T2는 지금 바로 읽기 요청
이전 커밋 버전
A = 100
지금까지 다른 트랜잭션이 보던 안정된 값
T1이 만드는 새 버전
A = 200
아직 수정 중이므로 읽기 규칙이 결과를 결정
비교 기준
전통적 락 방식
MVCC
읽기 요청 순간
T2는 잠금이 풀릴 때까지 대기 같은 행을 수정 중이면 읽기도 바로 진행되지 않습니다.
T2는 자신의 시점에 맞는 버전을 즉시 선택 새 버전이 미완성이어도 이전 커밋 버전으로 읽기를 계속합니다.
바로 보이는 값
지금은 결과 없음 T1 COMMIT 후에야 A = 200을 읽을 수 있습니다.
즉시 A = 100을 읽음 읽는 쪽은 기다리지 않고, 커밋된 이전 버전으로 일관된 결과를 받습니다.
왜 중요한가
읽기와 쓰기가 서로를 막음 동시에 접근하는 사용자가 많을수록 대기 시간이 늘어납니다.
읽기와 쓰기를 분리해 동시성 확보 핵심은 데이터를 하나로 잠그는 대신, 누가 어떤 버전을 볼지 정하는 것입니다.
핵심
MVCC는 같은 데이터에 대한 접근 자체를 막지 않고, 여러 버전 중 읽는 시점에 맞는 값을 고르게 합니다. 그래서 읽기는 멈추지 않으면서도 일관성을 유지할 수 있습니다.