[데이터베이스] 동시성 제어 2, Multiple Granularity Locking, 다중 단위 락

December 04, 2023


다시보는 Locking

동시성 제어 1에서 우리는 locking에 대해 알아보았습니다.

공유 잠금 (Shared Lock)

  • 공유 잠금은 다른 말로 읽기 잠금(Read Lock)이라고도 부름

베타 잠금 (Exclusive Lock)

  • 베타 잠금은 다른 말로 쓰기 잠금(Write Lock)이라고도 부름

Multiple granularity locking

lock의 단위를 다르게 가져가는 기법

granularity

Fine granularity Coarse granularity
레코드 단위로 잘게 쪼개어 락을 관리 테이블처럼 큰 단위로 락을 관리
병렬성은 높아지나 높은 오버헤드 병렬성은 낮아지나 낮은 오버헤드

MGL level

F는 파일(테이블), p은 레코드를 의미합니다.

이렇듯 데이터베이스는 계층내 트리의 각 노드를 개별적으로 잠글 수 있습니다.

크게는 DB, Table 작게는 Record 단위로 락을 얻고 풀 수 있게 합니다.

특징

  • 계층을 나누어서 Fine, Coarse를 적절히 사용해 높은 병렬성과 낮은 오버헤드를 목표
  • SX lock 외에도 여러 세분성이 있는 세 가지 lock 모드가 추가적으로 있습니다.

Intention locking

노드 N에 대해 Intention lock 을 건다는 것은 미래에 N의 하위 노드에도 lock을 걸겠다는 것을 명시하는 것입니다.

IS mode

Intention Shared Mode

  • 하위 레벨에서 Explicit S mode의 lock 보유
  • 하위 레벨에서 명시적 잠금이지만, S lock만 사용

IX mode

Intention Exclusive Mode

  • 하위 레벨에서 Explicit X mode의 lock 보유
  • S 또는 X 잠금을 사용하여 하위 레벨에서 명시적 잠금

SIX mode

Shared & Intention Exclusive Mode

  • Explicit S mode의 lock 보유
  • 하위 레벨에서 Explicit X mode의 lock 보유
  • S 락을 걸면서 IX 락도 거는 것

Compatibility matrix

MGL 락 호환성

MGL은 locking을 요청할 때, 위에서 가능한 경우에만 lock을 수행합니다.

Locking protocol in MGL

Lock 진행 과정
획득 Root → Leaf
해제 Leaf → Root

MGL 작동 방식

  1. 트리의 루트 노드가 처음에 어떤 lock이든 간에 lock에 걸려야 함
  2. 노드 Q에 S 또는 IS lock을 걸려면 해당 노드의 부모 노드가 IX 또는 IS lock을 가진 상태여야 함
  3. 노드 Q에 X, SIX, IX lock을 걸려면 해당 노드의 부모 노드가 IX 또는 SIX lock을 가진 상태여야 함
  4. 2PL를 따르기 때문에 어떤 lock이든 해제한 적이 있다면 이후로는 lock을 얻는 행위는 하지 못함
  5. 노드 Q의 lock을 해제하고 싶다면 해당 노드의 하위 노드 중에 lock이 걸린 노드가 없어야 함

참고

https://www.geeksforgeeks.org/multiple-granularity-locking-in-dbms/


Profile picture

이재원

이해하기 쉬운 코드를 작성하려 고민합니다.


© 2024 Won's blog Built with Gatsby