갭 락

갭 락은 InnoDB에서 인덱스 레코드 사이의 빈 공간을 잠가 해당 범위에 새로운 레코드가 삽입되는 것을 막는 락입니다.

왜 필요한가

레코드 락은 이미 존재하는 행을 보호합니다. 하지만 범위 조회 조건에 해당하는 새 행이 삽입되는 것은 레코드 락만으로 막기 어렵습니다. 갭 락은 인덱스 값 사이의 공간을 잠가 팬텀 리드를 방지하는 데 사용됩니다.

예시

인덱스 값: 10, 20
갭: (-∞, 10), (10, 20), (20, +∞)

10과 20 사이의 갭이 잠기면, 다른 트랜잭션은 이 범위에 15 같은 새 값을 삽입할 수 없습니다.

특징

갭 락 vs 넥스트키 락

항목갭 락넥스트키 락
잠금 대상인덱스 사이의 공간레코드와 그 앞의 갭
목적새 레코드 삽입 방지레코드 변경과 범위 삽입 방지
팬텀 리드 방지가능가능

핵심 정리

갭 락은 범위 안에 새 레코드가 삽입되는 것을 막아 팬텀 리드를 방지합니다.

→ MySQL InnoDB에서 갭락과 넥스트키 락이란 무엇이며, 어떻게 팬텀 리드를 방지하나요?

CSLOG에서 보기