MVCC


MVCC


MVCC란?

MVCC는 Multi Version Concurrency Controll의 약자이다.

MVCC는 동시 접근을 허용하는 데이터베이스에서 동시성을 제아하기 위해 사용하는 방법 중 하나이다.

MVCC에서 데이터에 접근하는 사용자는 접근한 시점에 데이터베이스의 Snap-Shot을 읽는다.

MVCC 데이터베이스가 데이터의 업데이트가 필요할 때, 기존 데이터 항목을 새로운 데이터가

덮어쓰는 대신 데이터 항목의 새로운 버전을 읽는다. 즉 여러 버전이 저장된다.


MVCC는 ponit-in-time consistent 뷰를 제공한다. MVCC 상태에서 읽기 트랜잭션은

일반적으로 타임스탬프나 트랜잭션 ID를 사용하여 읽을 DB의 상태를 결정하고 데이터의 버전을 읽는다.

그러므로 읽기,쓰기 lock이 필요 없이 다른 트랜잭션과 격리된다.


MVCC 동작원리

MVCC의 목표 : 동시성 문제가 발생할 수 있는 상황에서 잠금을 사용하지 않고 일관성 있는 읽기를 제공

MVCC는 낙관적(Optimistic) 동시성 제어의 변형이라고 할 수 있다.

낙관적 동시성 제어는 해당 테이블 컬럼의 version 정보를 담는 컬럼을 추가하여 수정 연산에서

해당 row의 버전을 확인하고 동일하면 commit, 동일하지 않으면 rollback을 하는 구조이다.


MVCC는 낙관적 동시성 제어 기법에서 사용하는 version 데이터를 ‘롤백-세그먼트’에 저장하여

관리하는 로직이다. 롤백 세그먼트는 트랜잭션 진행시 시작 지점의 이미지(snap-shot)을 기록하고

그 값을 저장하는데 사용된다. 이 롤백-세그먼트는 트랜잭션의 롤백, 복구, 읽기 일관성을 위해서 사용된다.



References


▶︎ wikipedia

▶︎ 망나니 개발자 Tistory

▶︎ medium.com