- Two phase lock
- Serializabilityを実現するために使われる
- Pessimistic Concurrency Control
- Read-Read以外は全部ブロックする
- Snapshot isolationと異なり、リーダーはライターをブロックする & ライターはリーダーもブロックする
仕組み
-
Shared modeのロックと、Exclusive modeのロックがある
- Shared mode lock
- 複数のトランザクションが同時に取得できる
- 他のトランザクションがそのオブジェクトのExclusive mode lockを取得していたら、それを待たないと取れない
- Exclusive mode lock
- 排他ロックなので、同時に取得できるトランザクションは1つ
- Shared mode lock
-
Readするとき: まずShared modeのロックを取ってから読む
-
Writeするとき: まずExclusive mode lockを取ってから書く
-
ロックを取得したトランザクションは、トランザクションCommit時(またはAbort時)まで保持し続けないといけない
-
Phantomを発生させないため、lockは、オブジェクト単位だったり、predicate lockだったり、range lockだったり
-
Deadlockが起こり得る