본문 바로가기
DATABASE/Databse

[Database] MVCC (Multi-Version Concurrency Control) - 다중 버전 동시성 제어

by DANEW 2024. 11. 18.

MVCC (Multi-Version Concurrency Control)

다중 버전 동시성 제어란?

 

데이터베이스에서 동시성을 제어하고 데이터의 일관성을 유지하기 위한 기법 중 하나이다.

데이터에 변경사항의 버전을 보관하여, 여러 버전의 데이터를 저장해두어 여러 트랜잭션간의 읽기 / 쓰기 작업이 동시에 수행 될 수 있도록 하는 방법이다.

 

트랜잭션의 읽기 작업이 쓰기 작업을 방해하지 않고, 일관된 데이터를 읽을 수 있게 하는 방식이 말 그대로 데이터의 다중 버전을 통한 동시성 제어이다.

 

MVCC 주요 개념

 

1. 스냅샷 읽기

 - 트랜잭션이 시작된 시점의 버전의 데이터를 기반으로 동작한다.

 - 다른 트랜잭션의 변경사항이 커밋되기 전 이라면, 그 데이터는 해당 시점의 버전에 포함되지 않는다.

2. 다중 버전 관리

 - 데이터가 변경 될 때 덮어 쓰는 것이 아닌 새 버전을 생성하여 여러 버전을 유지한다.

3. 가비지 컬렉션

 - 오래된 데이터 버전을 정리하여 저장공간을 유지한다.

 

MVCC 동작 원리

1. 데이터 버전 관리

 - 데이터가 변경 될 때 덮어쓰는 것이 아닌 새로운 버전을 생성한다.

 - 데이터가 생성된 시간 (타임스탬프) 등의 메타데이터를 기록하여 트랜잭션이 사용할 버전을 선택하는데 사용한다.

 

2. 읽기 동작 (Read)

 - 트랜잭션이 실행되면 그 시점을 스냅샷으로 고정한며, 해당 스냅샷에 기반한 데이터 버전을 읽는다.

 - 다른 트랜잭션에 의해 데이터가 수정되어도 고정된 스냅샷의 버전에는 영향을 주지 않는다.

 

3. 쓰기 동작 (Write)

 - 데이터가 쓰여지면, 덮어쓰는 것이 아닌새로운 버전을 생성한다.

 - 동일한 데이터를 여러 트랜잭션이 수정 할 경우, 일반적으로 첫 커밋이 성공 하고 나머지는 실패한다.

 - 낙관적 동시성 제어 / 비관적 동시성 제어가 있다.

 

4. 데이터 가시성 (Visibility)

 - 트랜잭션은 실행보다 이전에 커밋 된 데이터만 읽을 수 있다. 즉, 트랜잭션 진행 중 커밋 된 데이터는 읽을 수 없다.

 - 커밋 된 데이터는 이제부터 실행 될 다른 트랜잭션이 읽을 수 있는 상태가 된다.

 

5. 버전 삭제 (Garbage Collection)

 - 데이터의 버전은 디스크에 계속 저장이 되고있으며, 주기적으로 Garbage Collection을 통해 오래된 버전을 삭제한다.

 

MVCC 장단점

장점

1. 동시성 향상 : 읽기 작업에 Lock이 걸리지 않으므로 높은 동시성을 확보 할 수 있다.

2. 데드락 최소화 : 읽기 작업에 Lock이 걸리지 않으므로 데드락 또한 최소화 할 수 있다.

3. 일관된 읽기 : 트랜잭션이 시작된 시점의 버전을 읽기 때문에 데이터의 일관성을 보장 할 수 있다.

 

단점

1. 저장 공간 : 여러 버전의 데이터를 저장하기 위한 디스크 사용공간이 필요하다.

2. Garbage Collection 비용 : 주기적인 데이터 버전 삭제를 하기위한 성능 저하 발생할 수 있다.

3. 쓰기 경합 : 동일한 데이터에 대해 쓰기 작업의 충돌이 발생 할 수 있다.

반응형