Multiple Granularity Locking(MGL)
-
구체적으로 어떤것에 대해서에 락을 거냐
-
락을 걸 수 있는 데이터의 크기가 다양한다. → Multiple granularity
-
우리가 tree로 lock을 표현 가능하다.
- 노드에 락(explicitly)을 걸면
노드의 서브트리에 대해서 모두 락(implicitly)이다.
-
lock의 데이터가 작으면 (Fine granularity)
- concurrency가 증가하고 오버헤드는 증가
-
lock의 데이터가 크면 (Coarse granularity)
- concurrency가 증가하고 오버헤드는 감소

시스템마다 다르지만 보편적으로는 이렇다.
lock 할 수 있는 데이터 단위
- database
- relation (table,file)
- page (disk I/O 의 unit : 기본단위) 실제로 page 단위로 디비와 OS 가 한다.
- record (tuple) : lock 할 수 있는 가장 작은 단위
-
락을 걸수 있는 데이터의 크기가 다양하면 여러가지 모드가 가능하다.
Intention Lock Modes
: 하위 노드에 대한 구체적인 미래 lock mode를 현재 노드에 표시하는 lock mode 이다. → 기다리지 않게 하기 위해 (동시성 향상)
- Intention-shared (IS) 잠금:
- 하위 노드 중 하나에서 S-lock만을 명시적으로 잠금
- Intention-exclusive (IX) 잠금:
- 하위 노드 중 하나에서 X-lock만을 명시적으로 잠금
- Shared and Intention-exclusive (SIX) 잠금:
- 해당 노드 전체를 읽을 것이고 필요에 따라서 sub트리에 X-lock를 걸겠다.
Compatibility Matrix

- IS , SIX : 같은 노드를 고른다고 해도 기다렸다가 하면되서 괜찮음
- IX, SIX : lock conflict 일어나서 풀릴때까지 기다림
Multiple Granularity Locking(MGL) Scheme
- Lock : 위에서부터(root to leaf) 걸어서 내려오고
- Unlock : 밑에서부터(leaf to root) 풀면서 올라간다.