개발공부/real MySQL

[MySQL] MVCC(Multi Version Concurrency Control)

코푸딩 2024. 7. 8. 21:44
728x90

MySQL의 InnoDB 스토리지 엔진은 잠금을 사용하지 않는 일관된 읽기 제공을 위해 MVCC 기능을 제공한다.

이를 위해 언두 로그(Undo log)를 사용하며 이를 통해 하나의 레코드에 여러 버전이 존재할 수 있게 된다.

 

예시

데이터 수정 중 데이터 읽기 요청이 왔을 때, 언두 로그의 데이터와 레코드의 데이터 2가지 버전이 존재한다.

  1. UPDATE 쿼리에 의해 기존 데이터는 언두 로그에 기록되고 레코드는 새로운 데이터로 변경된다.
  2. 아직 COMMIT 이나 ROLLBACK이 되지 않은 상태에서 SELECT 요청이 들어온다.
  3. 격리 수준(Isolation Level)이 READ_UNCOMMITED인 경우 커밋되지 않은 레코드의 데이터를 읽는다.
    격리 수준이 READ_COMMITED 이상인 경우 기존 데이터(언두 로그의 데이터))를 읽는다.

 

트랜잭션이 많아지면 위와 같은 상황이 중첩되어 많은 버전이 존재할 수 있다.

MVCC 기술은 레코드의 변경에 상관 없이 읽기 작업이 가능하다.(격리 수준이 SERIALIZABLE인 경우 제외)

즉 레코드 변경이 다른 사용자의 읽기 요청에 영향을 주지 않는다.

728x90

'개발공부 > real MySQL' 카테고리의 다른 글

[MySQL] 쿼리 실행 구조  (0) 2024.07.08
MySQL 메모리 할당  (0) 2024.07.07
포그라운드 스레드와 백그라운드 스레드  (0) 2024.07.07