InnoDB의 기본 잠금 단위는 넥스트 키 락이며, 넥스트 키 락은 갭 락과 레코드 락을 결합한 형태이다.
2원 2규칙을 통해 넥스트 키 락의 동작 방식을 명확하게 설명하고, 잠금 범위 결정 원리를 제시한다.
다양한 쿼리 예시를 통해 갭 락, 레코드 락 등 잠금 유형별 동작과 트랜잭션 격리 수준을 분석한다.
InnoDB는 넥스트 키 락을 기본 잠금 단위로 사용하며, 이는 갭 락과 레코드 락을 결합한 형태이다. 구체적으로, 넥스트 키 락은 좌측 개구간, 우측 폐구간을 잠금으로써 팬텀 리드 문제를 해결한다. 따라서, 쿼리 수행 시 접근한 객체에만 잠금이 걸리도록 설계되어 데이터 무결성을 보장한다.
쿼리 조건에 따라 넥스트 키 락은 갭 락 또는 레코드 락으로 강등될 수 있다. 반면, 고유 인덱스를 사용하는 동등 조건 쿼리에서는 레코드 락으로, 비고유 인덱스 사용 시에는 갭 락으로 변환된다. 결과적으로, 쿼리 유형과 인덱스 사용 여부에 따라 잠금 범위가 동적으로 결정된다.
데드락 발생을 방지하기 위해 잠금 획득 순서를 일관되게 유지하고, 불필요한 잠금 범위를 최소화해야 한다. 따라서, 인덱스를 적절히 활용하여 쿼리 성능을 개선하고, REPEATABLE-READ 격리 수준에서 넥스트 키 락의 동작 방식을 정확히 이해해야 한다. 데이터베이스 설계 단계에서 잠금 전략을 고려하는 것이 중요하다.