ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 넥스트 키 락(Next-Key Lock) in Database Systems
    Database 2024. 8. 6. 00:26

    넥스트 키 락에 대한 소개

    넥스트 키 락은 데이터베이스 시스템에서 트랜잭션을 처리할 때 사용되는 동시성 제어 메커니즘입니다. 이는 주로 팬텀 리드(phantom read) 현상을 방지하는 데 유용합니다. 넥스트 키 락에서는 개별 행에 락을 거는 것이 아니라, 행과 행 사이의 간격에 락을 겁니다. 이렇게 하면 데이터베이스가 읽기와 쓰기를 보다 효과적으로 관리할 수 있어, 동시성 트랜잭션 간 데이터 일관성과 고립성을 보장할 수 있습니다.

    넥스트 키 락의 구성 요소

    1. 레코드 락(Record Locks): 실제 행에 걸리는 락.
    2. 갭 락(Gap Locks): 행 사이의 간격에 걸리는 락.
    3. 넥스트 키 락(Next-Key Locks): 레코드 락과 갭 락의 조합으로, 두 개의 연속된 인덱스 레코드 사이의 간격에 락을 겁니다.

    넥스트 키 락의 예시 설명

    예시로 다음과 같은 행이 있는 Customers 테이블을 고려해 봅시다:


    ID Name
    1 Alice
    2 Bob
    4 Carol
    5 Dave

    이 테이블에서 ID 2와 4 사이, ID 4와 5 사이에 간격이 있습니다. 넥스트 키 락은 이러한 간격에 락을 겁니다.

    자세한 설명과 시각화

    1. 초기 상태:
      • 테이블의 행: 1 (Alice), 2 (Bob), 4 (Carol), 5 (Dave).
      • 간격: ID 2와 4 사이, ID 4와 5 사이.
    2. 넥스트 키 락 적용:
      • 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에 의해 잠김.

    자세한 단계

    1. 트랜잭션 T1 시작:
      • T1이 ID 3을 가진 행을 삽입하려고 함.
    2. 락 메커니즘:
      • T1은 간격 (2, 4]에 넥스트 키 락을 겁니다.
      • 이는 ID 2와 4 사이의 간격이 잠겨 다른 트랜잭션이 이 간격에 행을 삽입하지 못하게 합니다.
      • 또한, ID 4 (Carol)인 행에도 락을 겁니다.
    3. 삽입:
      • T1은 ID 3을 가진 행을 삽입합니다.
    4. 일관성 검사:
      • T1이 락을 유지하는 동안, 다른 트랜잭션은 간격 (2, 4]에 행을 삽입, 삭제 또는 업데이트할 수 없습니다.

    예시 시나리오

    두 개의 트랜잭션, T1과 T2를 고려해 봅시다:

    • T1이 ID 3을 가진 행을 삽입하려 함.
    • T2도 동시에 ID 3을 가진 행을 삽입하려 함.

    단계:

    1. T1이 간격 (2, 4]과 레코드 4에 넥스트 키 락을 겁니다.
    2. T2가 ID 3을 삽입하려 하지만, T1의 락 때문에 차단됨.
    3. T1이 삽입을 완료하고 트랜잭션을 커밋함.
    4. T2는 T1의 락이 해제된 후에야 작업을 계속할 수 있음.

    넥스트 키 락의 중요성

    넥스트 키 락은 다음을 방지하는 데 도움이 됩니다:

    1. 팬텀 리드(Phantom Reads): 다른 트랜잭션이 커밋되지 않은 변경사항을 보지 못하게 하여 일관된 데이터 보기를 제공함.
    2. 쓰기 왜곡(Write Skew): 동시성 트랜잭션이 중복되는 데이터를 쓰는 것을 방지하여 일관성을 유지함.
    3. 교착 상태(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

    댓글

Designed by Tistory.