MVCC
JeongSeulho
2025년 01월 17일
준비중...
클립보드로 복사
MVCC(Multi-Version Concurrency Control)
- 기존의
lock
방식은write lock
에서 다른 트랜잭션이 아무것도 못함 => 성능 저하 MVCC
는write lock
을 갖고 있어도 다른 트랜잭션에서 읽기는 가능- 실제 RDBMS는
MVCC
와lock
을 함께 사용함
MVCC
는 read에서 특정 시점 기준으로 커밋된 데이터를 읽으며 이 시점을 기준으로 세부적으로 나뉨- 여러 시점을 기준으로 하기 때문에 write 이력(데이터 변경 이력)을 추가로 관리해야함
read committed 격리 레벨의 MVCC
- read하는 시간 기준으로 커밋된 데이터를 읽음음
repeatable read 격리 레벨의 MVCC
- read operation의 트랜잭션 시작 시점의 데이터를 읽음
여기서 트랜잭션 시작 시점이라고 했지만, RDBMS마다 다름 트랜잭션 안에서 다른 최초 read의 시점인 경우 트랜잭션 안에서 다른 최초의 해당 데이터에 접근하는(read, write) 시점인 경우
read uncommitted 격리 레벨의 MVCC
MYSQL
:MVCC
미적용postgresql
: 지칭은read uncommitted
이지만read committed
로 동작
트랜잭션과 격리 레벨
- 트랜잭션마다 다른 격리 레벨을 지정할 수 있음
- 격리 레벨의 조합과 실제 요청 순서, 상황에 따라 다양한 결과가 나오며 의도치 않은 결과가 나올 수 있음
- 중요한 트랜잭션의 격리 레벨을 높여도 같이 진행되는 다른 트랜잭션의 격리 레벨이 낮으면 의도하지 않은 결과가 나올 수 있음
- 또한
RDBMS
마다 실제 동작방식과 구현은 다르므로 실제 사용하는RDBMS
의 동작방식을 확인해야함