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. 쓰기 경합 : 동일한 데이터에 대해 쓰기 작업의 충돌이 발생 할 수 있다.
'DATABASE > Databse' 카테고리의 다른 글
[Database] WAL 이란? - 데이터 쓰기의 이해와 WAL을 쓰는 이유 (0) | 2024.12.07 |
---|---|
[DBA] 여러 DBMS 마다의 DBA의 중점 역할 차이 (0) | 2024.11.25 |
[DATABASE] OLTP / OLAP 란 무엇인가? (3) | 2024.10.28 |
[Database] ODBC 란? - DBMS 이기종 간의 접속에 대하여 (2) | 2023.08.07 |
[Database] 트랜잭션(Transaction)과 격리 수준(Isolation Level) (0) | 2023.07.16 |
DBA - 데이터베이스 관리자(DataBase Administrator) (0) | 2023.06.20 |