Tech

Diary

Lecture

About Me

개발중

MVCC

JeongSeulho

2025년 01월 17일

준비중...
클립보드로 복사

MVCC(Multi-Version Concurrency Control)

  • 기존의 lock 방식은 write lock에서 다른 트랜잭션이 아무것도 못함 => 성능 저하
  • MVCCwrite lock을 갖고 있어도 다른 트랜잭션에서 읽기는 가능
  • 실제 RDBMS는 MVCClock을 함께 사용함

Image

  • MVCC는 read에서 특정 시점 기준으로 커밋된 데이터를 읽으며 이 시점을 기준으로 세부적으로 나뉨
  • 여러 시점을 기준으로 하기 때문에 write 이력(데이터 변경 이력)을 추가로 관리해야함

read committed 격리 레벨의 MVCC

  • read하는 시간 기준으로 커밋된 데이터를 읽음음

Image

repeatable read 격리 레벨의 MVCC

  • read operation의 트랜잭션 시작 시점의 데이터를 읽음

Image

여기서 트랜잭션 시작 시점이라고 했지만, RDBMS마다 다름 트랜잭션 안에서 다른 최초 read의 시점인 경우 트랜잭션 안에서 다른 최초의 해당 데이터에 접근하는(read, write) 시점인 경우

read uncommitted 격리 레벨의 MVCC

  • MYSQL : MVCC 미적용
  • postgresql : 지칭은 read uncommitted이지만 read committed로 동작

트랜잭션과 격리 레벨

  • 트랜잭션마다 다른 격리 레벨을 지정할 수 있음
  • 격리 레벨의 조합과 실제 요청 순서, 상황에 따라 다양한 결과가 나오며 의도치 않은 결과가 나올 수 있음
  • 중요한 트랜잭션의 격리 레벨을 높여도 같이 진행되는 다른 트랜잭션의 격리 레벨이 낮으면 의도하지 않은 결과가 나올 수 있음
  • 또한 RDBMS마다 실제 동작방식과 구현은 다르므로 실제 사용하는 RDBMS의 동작방식을 확인해야함