트랜잭션 - 동시성 제어 #MVCC

dragonappear·2023년 6월 20일

Database 101

목록 보기
4/10

출처: https://www.researchgate.net/figure/Multi-version-concurrency-control_fig16_343891226


MVCC

MVCC

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

Isolation 별 MVCC

  • READ COMMITTED => 50

    • Read하는 시간을 기준으로 그 전에 commit된 데이터를 읽음
  • REPEATABLE READ => 10

    • TX 시작 시간 전에 커밋된 데이터를 읽음
  • SERIALIZABLE => 10

    • MySQL 의 경우 MVCC보다는 lock으로 동작
  • READ UNCOMMITTED

    • MVCC는 커밋된 데이터를 읽기 하기 때문에 보통 MVCC가 이 레벨에서 동작하지 않는다.

Locking Read

  • Lost Update 이슈 발생

MySQL 기준으로 select for update 으로 Locking Read를 할 수 있다.

  • Locking Read는 가장 최근에 커밋된 데이터를 읽는다.

Reaptable read에서 Write skew 문제

  • Write Skew 발생

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

Serializable에서 Write Skew 해결

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

0개의 댓글