다시보는 Locking
동시성 제어 1에서 우리는 locking에 대해 알아보았습니다.
공유 잠금 (Shared Lock)
- 공유 잠금은 다른 말로 읽기 잠금(Read Lock)이라고도 부름
베타 잠금 (Exclusive Lock)
- 베타 잠금은 다른 말로 쓰기 잠금(Write Lock)이라고도 부름
Multiple granularity locking
lock의 단위를 다르게 가져가는 기법
Fine granularity | Coarse granularity |
---|---|
레코드 단위로 잘게 쪼개어 락을 관리 | 테이블처럼 큰 단위로 락을 관리 |
병렬성은 높아지나 높은 오버헤드 | 병렬성은 낮아지나 낮은 오버헤드 |
F는 파일(테이블), p은 레코드를 의미합니다.
이렇듯 데이터베이스는 계층내 트리의 각 노드를 개별적으로 잠글 수 있습니다.
크게는 DB, Table 작게는 Record 단위로 락을 얻고 풀 수 있게 합니다.
특징
- 계층을 나누어서 Fine, Coarse를 적절히 사용해 높은 병렬성과 낮은 오버헤드를 목표
S
및X
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은 locking을 요청할 때, 위에서 가능한 경우에만 lock을 수행합니다.
Locking protocol in MGL
Lock | 진행 과정 |
---|---|
획득 | Root → Leaf |
해제 | Leaf → Root |
MGL 작동 방식
- 트리의 루트 노드가 처음에 어떤 lock이든 간에 lock에 걸려야 함
- 노드 Q에
S
또는IS
lock을 걸려면 해당 노드의 부모 노드가IX
또는IS
lock을 가진 상태여야 함 - 노드 Q에
X
,SIX
,IX
lock을 걸려면 해당 노드의 부모 노드가IX
또는SIX
lock을 가진 상태여야 함 - 2PL를 따르기 때문에 어떤 lock이든 해제한 적이 있다면 이후로는 lock을 얻는 행위는 하지 못함
- 노드 Q의 lock을 해제하고 싶다면 해당 노드의 하위 노드 중에 lock이 걸린 노드가 없어야 함
참고
https://www.geeksforgeeks.org/multiple-granularity-locking-in-dbms/