
출처: https://www.researchgate.net/figure/Multi-version-concurrency-control_fig16_343891226
MVCC
MVCC
- 데이터를 읽을때 특정 시점 기준으로(Isolation Level에 따라 다름) 가장 최근에 커밋된 데이터를 읽는다.
- 데이터 변화(write) 이력을 관리한다
- read와 write는 서로를 block하지 않는다.
- Lock-based concurrency control보다 blocked 수가 적어서 처리량이 높다
- 처리량이 높지만 history를 관리해야하므로 추가 용량을 사용해야 한다.

Isolation 별 MVCC
-
READ COMMITTED => 50
- Read하는 시간을 기준으로 그 전에 commit된 데이터를 읽음
-
REPEATABLE READ => 10
-
SERIALIZABLE => 10
- MySQL 의 경우 MVCC보다는 lock으로 동작
-
READ UNCOMMITTED
- MVCC는 커밋된 데이터를 읽기 하기 때문에 보통 MVCC가 이 레벨에서 동작하지 않는다.
Locking Read


MySQL 기준으로 select for update 으로 Locking Read를 할 수 있다.
- Locking Read는 가장 최근에 커밋된 데이터를 읽는다.
Reaptable read에서 Write skew 문제

MySQL - Locking Read 적용으로 Write Skew 해결

Serializable에서 Write Skew 해결

MySQL에서 Repeatable Read와 유사하게 동작
tx의 모든 평범한 select 문은 암묵적으로 select for share처럼 동작