5장 트랜잭션

2024. 7. 1. 19:14BOOKS/Real MySQL 8.0

문제1. InnoDB에서 인덱스 설계가 중요한 이유에 대해 설명해주세요.

InnoDB는 MySQL에서 제공하는 잠금과 별개로 스토리지 엔진 내부에 레코드 기반 잠금 방식을 가지고 있습니다. 이 때 변경하려는 레코드 자체에 락을 거는 것이 아니라 검색한 인덱스의 레코드에 잠금을 걸기 때문에 같은 인덱스에 속한 모든 레코드에 락이 걸리게 됩니다. 그렇기 때문에 인덱스 설계를 통해 데이터 변경 시 락이 걸리는 범위를 줄일 수 있도록 해주어야 합니다.

문제 2. GAP Lock에 대해 설명해주세요

레코드와 바로 인접한 레코드 사이의 간격만 잠그는 것으로 레코드와 레코드 사이의 간격에 새로운 레코드가 생성되는 것을 제어합니다.

문제 3. 격리 수준이 READ COMMITTED 인 상태에서 A 트랜잭션이 데이터를 변경 중일 경우 B 트랜잭션이 해당 데이터를 조회하면 어떻게 되나요?

A 트랜잭션이 데이터를 변경하기 전 언두 로그에 이전 데이터 값을 저장해놓고, B트랜잭션이 해당 데이터를 읽으려고 하면 언두 로그에서 값을 읽어와서 변경 전 데이터를 보여줍니다.

문제 4. 격리 수준이 REPEATABLE READ인 상태에서 A 트랜잭션이 first_name = ‘NICK’인 데이터를 조회한 후 B 트랜잭션이 first_name = ‘NICK’인 새로운 데이터를 입력했습니다. A 트랜잭션에서 first_name = ‘NICK’인 데이터를 다시 조회했을 때 새로 입력된 데이터가 포함이 되나요?

REPEATABLE READ에서는 PHANTOM READ가 발생하기 때문에 새로 입력된 데이터도 조회됩니다.
But InnoDB에서는 갭 락, 넥스트 키 락이 발생하기 때문에 PHANTOM READ가 발생하지 않습니다.

'BOOKS > Real MySQL 8.0' 카테고리의 다른 글

13장 파티션  (0) 2024.07.01
10장 실행계획  (0) 2024.07.01
9장 옵티마이저와 힌트  (0) 2024.07.01
8장 인덱스  (0) 2024.07.01
4장 아키텍처  (0) 2024.07.01