Learning
토픽 47 / 201·무결성 및 트랜잭션

MVCC (Multi-Version Concurrency Control)

MVCC (Multi-Version Concurrency Control)

데이터의 여러 버전(Multi-Version)을 유지하여 읽기와 쓰기가 서로 블로킹하지 않도록 하는 동시성 제어 기법

특징: 읽기 시 잠금 불필요(높은 동시성), 저장공간 증가(구 버전 유지), 가비지 컬렉션 필요

구성요소

  • 버전 체인(Version Chain): 데이터의 이전/현재 버전 연결
  • 트랜잭션 ID: 각 트랜잭션에 부여되는 고유 식별자
  • 가시성 규칙(Visibility Rule): 트랜잭션이 어떤 버전을 볼 수 있는지 결정

동작원리

  • 쓰기 시 새 버전 생성, 이전 버전 유지
  • 읽기 시 트랜잭션 시작 시점 기준 Snapshot으로 일관된 읽기
  • 구 버전은 Vacuum(PostgreSQL) 또는 Undo 세그먼트 정리(Oracle)로 회수

적용사례: PostgreSQL(Snapshot Isolation), Oracle(Undo 세그먼트), MySQL InnoDB(Undo Log)

비교: MVCC(읽기무잠금/높은동시성/공간증가) vs Locking(읽기잠금/낮은동시성/공간절약)

연관: 동시성 제어, 격리 수준, 스냅샷 격리, Vacuum