MVCC, 일관된 읽기

무지성개발자·2023년 10월 13일
0

MVCC

MVCC란 잠금을 사용하지 않는 일관된 읽기를 제공하는 것을 말한다. 여기서 말하는 일관된 읽기란 여러 커낵션이 작업 중일 때 수정작업이 있어도 읽기에 관한건 isolation level에 맞는 읽기를 제공한다는 것이다.

어떻게 일관된 읽기를 제공할까?

MVCC는 일관된 읽기를 제공하기 위해 Undo로그를 사용한다. 먼저 MySQL은 수정 작업이 일어나면 바로 disk에 쓰는게 아니라 메모리(버퍼풀)에 내용을 바꾸고 여러 작업들을 한번에 disk로 적용시킨다.

때문에 트랜잭션에서 update가 일어나게 되면 디스크의 데이터가 바뀌는게 아니라 메모리(버퍼풀)의 데이터를 변경하고 변경전 내용을 Undo로그 영역에 기록한다. Undo로그 영역의 데이터는 Rollback을 위한 영역인데 격리레벨 수준에 따라 Undo로그의 영역에서 데이터를 읽어서 일관된 읽기를 제공한다.

  • read_uncommitted
    • 커밋되지 않은 데이터를 읽는 수준의 레벨이므로 Undo로그 영역의 데이터를 읽지 않고 버퍼풀의 내용을 그대로 읽는다.
  • read_committed & repeatable_read
    • 커밋되지 않는 데이터를 읽지 않는 수준의 레벨이므로 커밋되지 않은 변경사항이 있으면 Undo로그 영역에서 데이터를 읽는다.

InnoDB 스토리지 엔진은 MVCC를 이용해서 Non-Locking 일관된 읽기 작업을 수행한다.


한 줄평 : 격리레벨에 따라 읽는 방식이 다르다.

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글