InnoDB 넥스트 키 락, 2원 2규칙으로 잠금 마스터 되세요!

by DD
7개월 전
조회수 8

InnoDB의 기본 잠금 단위는 넥스트 키 락이며, 넥스트 키 락은 갭 락과 레코드 락을 결합한 형태이다.

2원 2규칙을 통해 넥스트 키 락의 동작 방식을 명확하게 설명하고, 잠금 범위 결정 원리를 제시한다.

다양한 쿼리 예시를 통해 갭 락, 레코드 락 등 잠금 유형별 동작과 트랜잭션 격리 수준을 분석한다.

넥스트 키 락의 작동 원리: 2원 2규칙

InnoDB는 넥스트 키 락을 기본 잠금 단위로 사용하며, 이는 갭 락과 레코드 락을 결합한 형태이다. 구체적으로, 넥스트 키 락은 좌측 개구간, 우측 폐구간을 잠금으로써 팬텀 리드 문제를 해결한다. 따라서, 쿼리 수행 시 접근한 객체에만 잠금이 걸리도록 설계되어 데이터 무결성을 보장한다.

다양한 쿼리 시나리오 분석: 갭 락, 레코드 락

쿼리 조건에 따라 넥스트 키 락은 갭 락 또는 레코드 락으로 강등될 수 있다. 반면, 고유 인덱스를 사용하는 동등 조건 쿼리에서는 레코드 락으로, 비고유 인덱스 사용 시에는 갭 락으로 변환된다. 결과적으로, 쿼리 유형과 인덱스 사용 여부에 따라 잠금 범위가 동적으로 결정된다.

실전 적용 가이드: 데드락 회피 및 성능 최적화

데드락 발생을 방지하기 위해 잠금 획득 순서를 일관되게 유지하고, 불필요한 잠금 범위를 최소화해야 한다. 따라서, 인덱스를 적절히 활용하여 쿼리 성능을 개선하고, REPEATABLE-READ 격리 수준에서 넥스트 키 락의 동작 방식을 정확히 이해해야 한다. 데이터베이스 설계 단계에서 잠금 전략을 고려하는 것이 중요하다.

InnoDB 행 잠금의 2원 2규칙