
데이터베이스
Multi-Version Concurrency ControlMVCC
MVCC(Multi-Version Concurrency Control, 다중 버전 동시성 제어)는 데이터의 여러 버전을 동시에 유지해 읽기와 쓰기가 서로를 블로킹하지 않도록 하는 동시성 제어 기법이다. PostgreSQL, MySQL InnoDB의 핵심 메커니즘이다.
핵심 아이디어
PostgreSQL MVCC 동작
가시성 규칙
트랜잭션 T가 행 버전을 볼 수 있는 조건:
- •xmin이 T 이전에 커밋됨
- •xmax가 0이거나 T 이후에 시작됨
VACUUM (PostgreSQL)
MVCC는 오래된 버전을 디스크에 보관한다. 더 이상 필요 없는 오래된 버전을 청소하는 프로세스가 VACUUM.
MySQL InnoDB의 Undo Log
InnoDB는 변경 전 데이터를 Undo Log에 저장해 MVCC를 구현한다. 읽기 트랜잭션은 Undo Log를 통해 이전 버전을 재구성한다.
관련 개념
- •트랜잭션 격리 수준 — MVCC가 구현하는 격리 수준
- •WAL — 쓰기 내구성 보장
- •PostgreSQL — MVCC 기반 DB
- •데드락 — MVCC로 감소하지만 완전 제거는 안 됨