ロックの粒度と共有・専有ロック
出典: 令和元年度 秋期 応用情報技術者試験 午前 問28 (IPA)
RDBMS のロックに関する記述のうち,適切なものはどれか。ここで,X,Y はトランザクションとする。
- ア X が A 表内の特定行 a に対して共有ロックを獲得しているときは,Y は A 表内の別の特定行 b に対して専有ロックを獲得することができない。
- イ X が A 表内の特定行 a に対して共有ロックを獲得しているときは,Y は A 表に対して専有ロックを獲得することができない。
- ウ X が A 表に対して共有ロックを獲得しているときでも,Y は A 表に対して専有ロックを獲得することができる。
- エ X が A 表に対して専有ロックを獲得しているときでも,Y は A 表内の特定行 a に対して専有ロックを獲得することができる。
正解と解説を見る
正解: イ
- ア: 行 a と行 b は別の行なので、X が行 a に共有ロックを掛けていても、Y は行 b に専有ロックを掛けられます。
- イ: 表全体の専有ロックは行 a も含むので、X が行 a に共有ロックを掛けている間は、Y は表に専有ロックを掛けられません。正しい記述です。
- ウ: X が表に共有ロックを掛けている間は、Y はその表に専有ロックを掛けられません。
- エ: X が表に専有ロックを掛けている間は、Y はその表のどの行にも専有ロックを掛けられません。
ポイント
- 共有ロック: 読むためのロック。他のトランザクションも共有ロックなら同時に掛けられますが、専有ロックは掛けられません。
- 専有ロック: 書くためのロック。他のトランザクションは共有ロックも専有ロックも掛けられません。
- 表単位のロック は、その表の 全ての行 にロックを掛けるのと同じです。そのため、X が行 a に共有ロックを掛けていると、Y は表全体に専有ロックを掛けられません。