chick chick pok pok

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

갭락은 레코드와 레코드 사이의 간격을 잠그는 잠근 방식이다. 레코드와 레코드 사이에 새로운 레코드가 생성되는 것을 제어하낟. 이를 위해 인덱스 레코드에 존재하는 메타데이터를 활용한다. 자신과 인접한 인덱스 레코드의 정보다 포함되어있다.

넥스트 키락은 테이블 기반의 잠금 방식을 채택하고 있는 MyIAM엔진 락을 합쳐놓은 형태의 잠금방식이다. ![[CleanShot 2025-08-13 at 12.40.12.png]]

사진출처

레코드 락과 갭 락을 합쳐놓은 형태의 잠금으로 락 기반의 조회 쿼리에 범ㅁ위 조건을 걸었을 때 설정된다. 해당 레코드 뿐 아니라 갭에도 락이 걸리게 된다. 그 이유는 InnoDN엔진의 B+ 트리 구조를 이루고 있기 때문이다.

넥스트 키 락이 팬텀 리드를 방지할 수 있는 이유

B+트리는 리프로드가 오른쪽 리프노드의 포인터를 갖는 연결 구조로 되어있다. 이를 활용한다면 특정 리프로드는 다음으로 큰 리프노드에 빠르게 접근할 수 있다. 리프노드에 접간한 후, 포인처를 활용해 이동하고, 이동한 노드의 id가 조건에 부합하는지 체크한다. 인덱스 레코드가 잠기고 각 인덱스 레코드의 메타데이터를 통해 갭도 잠긴다.