MVCC는 데이터의 여러 버전을 관리해 동시 트랜잭션이 적절한 시점의 데이터를 읽도록 하는 동시성 제어 방식이다.
데이터베이스 내부 |
|---|
WAL · 체크포인트 · MVCC · 트랜잭션 격리 수준 · 읽기 커밋 |
데이터베이스 교착 상태 · 비관적 잠금 · 파티셔닝 · 시점 복구 · 데이터베이스 백업 |
원리
각 읽기에 어떤 버전이 보일지 스냅샷과 트랜잭션 상태를 기준으로 결정한다. 읽기와 쓰기의 충돌을 줄일 수 있지만 모든 잠금이 없어지는 것은 아니다.
예시
다른 트랜잭션이 행을 갱신 중이어도 독자는 자신에게 보이는 이전 버전을 읽을 수 있다. 정확한 가시성 범위는 격리 수준에 따라 달라진다.
데이터베이스 | |
|---|---|
관계형 | MySQL · PostgreSQL · MariaDB · SQLite |
NoSQL | |
스토리지 엔진 | |
주의할 점
오래 열린 트랜잭션은 이전 버전 정리를 지연시킬 수 있다. MVCC 사용 여부만으로 직렬화 가능성이 보장되는 것은 아니므로 갱신 충돌과 업무 제약을 별도로 검토한다.