MVCC란?
전통적 락 기반 동시성 제어는 읽기도 대기시킨다. MVCC는 각 트랜잭션에 데이터의 특정 스냅샷을 보여줘 락 없이 읽기가 가능하다.
Postgres에서
행마다 xmin, xmax로 언제 만들어지고 언제 삭제됐는지 기록. 오래된 버전은 VACUUM이 정리.
장점
- 읽기가 쓰기를 막지 않음
- 일관된 스냅샷 (REPEATABLE READ 자연스러움)
단점
- 오래된 버전이 쌓여 테이블 bloat
- VACUUM이 제때 돌지 않으면 성능 저하
- Long running transaction이 vacuum 막으면 치명적