-
넥스트 키 락(Next-Key Lock) in Database SystemsDatabase 2024. 8. 6. 00:26
넥스트 키 락에 대한 소개
넥스트 키 락은 데이터베이스 시스템에서 트랜잭션을 처리할 때 사용되는 동시성 제어 메커니즘입니다. 이는 주로 팬텀 리드(phantom read) 현상을 방지하는 데 유용합니다. 넥스트 키 락에서는 개별 행에 락을 거는 것이 아니라, 행과 행 사이의 간격에 락을 겁니다. 이렇게 하면 데이터베이스가 읽기와 쓰기를 보다 효과적으로 관리할 수 있어, 동시성 트랜잭션 간 데이터 일관성과 고립성을 보장할 수 있습니다.
넥스트 키 락의 구성 요소
- 레코드 락(Record Locks): 실제 행에 걸리는 락.
- 갭 락(Gap Locks): 행 사이의 간격에 걸리는 락.
- 넥스트 키 락(Next-Key Locks): 레코드 락과 갭 락의 조합으로, 두 개의 연속된 인덱스 레코드 사이의 간격에 락을 겁니다.
넥스트 키 락의 예시 설명
예시로 다음과 같은 행이 있는 Customers 테이블을 고려해 봅시다:
ID Name 1 Alice 2 Bob 4 Carol 5 Dave 이 테이블에서 ID 2와 4 사이, ID 4와 5 사이에 간격이 있습니다. 넥스트 키 락은 이러한 간격에 락을 겁니다.
자세한 설명과 시각화
- 초기 상태:
- 테이블의 행: 1 (Alice), 2 (Bob), 4 (Carol), 5 (Dave).
- 간격: ID 2와 4 사이, ID 4와 5 사이.
- 넥스트 키 락 적용:
- ID 3을 가진 새로운 행을 삽입하려는 트랜잭션이 있다고 가정합니다.
초기 상태: | ID | Name | |-----|-------| | 1 | Alice | | 2 | Bob | | 4 | Carol | | 5 | Dave | 간격 (Interval): (1, 2] (2, 4] (4, 5] 넥스트 키 락 적용: 트랜잭션 T1이 ID=3 삽입을 시도: - 간격 (2, 4]에 락을 걸음 - 레코드 4 (Carol)에 락을 걸음 시각적 다이어그램: [1: Alice] (1, 2] [2: Bob] <-- 트랜잭션 T1이 간격 (2, 4]에 넥스트 키 락을 걸음 | v [4: Carol] (잠금) (4, 5] [5: Dave] 넥스트 키 락: - 간격 (2, 4]은 T1에 의해 잠김. - 레코드 4 (Carol)은 T1에 의해 잠김.
자세한 단계
- 트랜잭션 T1 시작:
- T1이 ID 3을 가진 행을 삽입하려고 함.
- 락 메커니즘:
- T1은 간격 (2, 4]에 넥스트 키 락을 겁니다.
- 이는 ID 2와 4 사이의 간격이 잠겨 다른 트랜잭션이 이 간격에 행을 삽입하지 못하게 합니다.
- 또한, ID 4 (Carol)인 행에도 락을 겁니다.
- 삽입:
- T1은 ID 3을 가진 행을 삽입합니다.
- 일관성 검사:
- T1이 락을 유지하는 동안, 다른 트랜잭션은 간격 (2, 4]에 행을 삽입, 삭제 또는 업데이트할 수 없습니다.
예시 시나리오
두 개의 트랜잭션, T1과 T2를 고려해 봅시다:
- T1이 ID 3을 가진 행을 삽입하려 함.
- T2도 동시에 ID 3을 가진 행을 삽입하려 함.
단계:
- T1이 간격 (2, 4]과 레코드 4에 넥스트 키 락을 겁니다.
- T2가 ID 3을 삽입하려 하지만, T1의 락 때문에 차단됨.
- T1이 삽입을 완료하고 트랜잭션을 커밋함.
- T2는 T1의 락이 해제된 후에야 작업을 계속할 수 있음.
넥스트 키 락의 중요성
넥스트 키 락은 다음을 방지하는 데 도움이 됩니다:
- 팬텀 리드(Phantom Reads): 다른 트랜잭션이 커밋되지 않은 변경사항을 보지 못하게 하여 일관된 데이터 보기를 제공함.
- 쓰기 왜곡(Write Skew): 동시성 트랜잭션이 중복되는 데이터를 쓰는 것을 방지하여 일관성을 유지함.
- 교착 상태(Deadlocks): 데이터 범위에 대한 접근을 제어하여 교착 상태 발생 가능성을 최소화함.
요약
넥스트 키 락은 레코드 락과 갭 락을 결합하여 데이터 동시성을 효과적으로 관리합니다. 이는 행 사이의 간격을 잠궈 팬텀 리드와 같은 이상 현상을 방지하고, 동시성 트랜잭션의 데이터 일관성을 보장합니다. 데이터베이스 전문가에게는 이 메커니즘을 이해하는 것이 견고하고 신뢰할 수 있는 시스템을 설계하는 데 매우 중요합니다.
'Database' 카테고리의 다른 글
MVCC (Multi-Version Concurrency Control)와 언두 로그(Undo Log), 리두 로그(Redo Log) (0) 2024.08.06 Phantom Rows (0) 2024.08.06 MariaDB Lock(이론) (0) 2023.04.01 MariaDB Isolation (0) 2023.04.01 MariaDB Lock(실전) (0) 2023.04.01