728x90
MySQL의 InnoDB 스토리지 엔진은 잠금을 사용하지 않는 일관된 읽기 제공을 위해 MVCC 기능을 제공한다.
이를 위해 언두 로그(Undo log)를 사용하며 이를 통해 하나의 레코드에 여러 버전이 존재할 수 있게 된다.
예시
데이터 수정 중 데이터 읽기 요청이 왔을 때, 언두 로그의 데이터와 레코드의 데이터 2가지 버전이 존재한다.
- UPDATE 쿼리에 의해 기존 데이터는 언두 로그에 기록되고 레코드는 새로운 데이터로 변경된다.
- 아직 COMMIT 이나 ROLLBACK이 되지 않은 상태에서 SELECT 요청이 들어온다.
- 격리 수준(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 |