データベースの基礎
トランザクションT1が、ある行に共有ロックをかけて読み出している。この行に対して、T2が共有ロックを、T3が専有ロック(排他ロック)を要求した。T1がロックを解除するまでの間について、正しいものはどれか。
- AT2はすぐにロックを得られるが、T3は待たされる
- BT2もT3も待たされる
- CT2もT3もすぐにロックを得られる
答えと解説を見る
正解:A. T2はすぐにロックを得られるが、T3は待たされる
共有ロックは、データを読み出すときにかけるロックで、ほかのトランザクションも同じデータに共有ロックをかけて同時に読み出せますが、書き込みのための専有ロックはかけられません。専有ロック(排他ロック)は、データを更新するときにかけるロックで、かかっている間は、ほかのトランザクションは共有ロックも専有ロックもかけられません。この例では、T1の共有ロックとT2の共有ロックは両立するので、T2はすぐにロックを得て読み出せます。T3の専有ロックはT1の共有ロックと両立しないので、T1がロックを解除するまで待たされます(T2も共有ロックを持っていれば、T2の解除も待ちます)。このようにロックを使って、同時に実行されるトランザクションどうしの干渉を防ぐことを排他制御と呼びます。
- A. 正しい。共有ロックどうしは両立し、専有ロックは共有ロックと両立しません。
- B. 共有ロックどうしは両立するので、T2は待たされません。
- C. 専有ロックは共有ロックと両立しないので、T3は待たされます。