다중 버전 동시성 제어

다중 버전 동시성 제어(, MCC, MVCC), 다중 버전 병행 수행 제어는 데이터베이스 관리 시스템이 일반적으로 사용하는 동시성 제어 방식으로, 데이터베이스로의 동시 접근을 제공하고 프로그래밍 언어에서 트랜잭셔널 메모리를 구현한다.

동시성 제어 없이 누군가가 데이터베이스를 읽는 동시에 다른 누군가가 기록을 하려고 한다면 독자는 반쯤 기록되거나 일관성이 없는 데이터를 보게 될 가능성이 있다.

MVCC 데이터베이스가 데이터의 업데이트가 필요할 때, 기존 데이터 항목을 새로운 데이터가 덮어쓰는 대신 데이터 항목의 새로운 버전을 만든다. 즉, 여러 버전이 저장된다. 각 트랜잭션이 주시하는 버전은 구현된 격리 레벨에 따른다. MVCC로 구현된 가장 흔한 격리 레벨은 스냅샷 격리이다. 스냅샷 격리를 사용하는 경우 트랜잭션은 트랜잭션이 시작할 당시처럼 데이터의 상태를 관찰한다.

MVCC는 포인트-인-타임 일관성(point-in-time consistent) 뷰를 제공한다. MVCC 상태에서 읽기 트랜잭션은 일반적으로 타임스탬프나 트랜잭션 ID를 사용하여 읽을 DB의 상태를 결정하고 데이터의 버전들을 읽는다. 그러므로 읽기, 쓰기 트랜잭션은 락(lock)의 필요 없이 다른 트랜잭션과 격리된다. 그러나 락이 불필요함에도 불구하고 오라클 등 일부 MVCC 데이터베이스에서는 락이 사용된다. 쓰기는 더 새로운 버전을 만드는 반면, 동시성 읽기는 더 오래된 버전에 접근한다.

역사 
다중 버전 동시성 제어는 1981년 Philip Bernstein과 Nathan Goodman의 "분산 데이터베이스 시스템의 동시성 제어"라는 논문에 일부 자세히 기술되어 있다.

Bernstein과 Goodman의 논문은 David P. Reed의 논문에 언급되었고 MVCC를 매우 분명하게 기술해 놓고 있다.

참조

더 읽기 
 Gerhard Weikum, Gottfried Vossen, Transactional information systems: theory, algorithms, and the practice of concurrency control and recovery, Morgan Kaufmann, 2002, 

동시성 제어
트랜잭션 처리
동시성 제어 알고리즘