問題
ロックの粒度に関する説明のうち,適切なものはどれか。
キーボード:1〜4で選択・Enterで次へ
答え合わせ
- A
- B
- C
- D
自信の3択
えらぶと、この端末に記録します(登録はいりません)
解説
答えは a「データを更新するときに,粒度を大きくすると,他のトランザクションの待ちが多くなり,全体のスループットが低下する」 です。
ロックの粒度は「1回のロックでどれだけの範囲をおさえるか」。表全体をロックするのは粒度が大きく、1行だけロックするのは粒度が小さい状態です。
粒度を大きくすると、関係ない行まで一緒にロックされるので、ほかのトランザクションが待たされることが増え、全体の処理量(スループット)が下がります。
👉 覚え方:粒度大=ロックの数は少ないが、待ちが増える/粒度小=ロックの数は多いが、待ちが減る。
ほかの選択肢:b 粒度を大きくすると同時実行できる数は減る/c 参照を妨げるかはロックの種類で決まる/d 粒度を大きくするとロックの個数は少なくなる。
なぜこれが正解か
正解は a。ロックの粒度(ロックをかける単位:データベース全体,表,ページ,行など)を大きくすると,1つのロックでおさえる範囲が広がり,本来競合しないデータまでロックの対象になる。その結果,他のトランザクションがロック解除を待つ機会が増え,同時に実行できる処理が減って全体のスループットが低下する。
各選択肢の解説
- a 正しい:粒度を大きくすると待ちが増え,スループットが低下する。
- b 誤り:粒度を大きくすると,同じデータを更新するトランザクション同士の競合範囲が広がり,同時実行できるトランザクション数は減る。
- c 誤り:他のトランザクションのデータ参照を妨げるかどうかは,ロックの種類(共有ロックか専有ロックか)で決まる。粒度を大きくすると,ロックの範囲が広がるので,むしろ他のトランザクションを妨げる範囲は広がる。
- d 誤り:粒度を大きくすると1つのロックで多くのデータをおさえられるので,1つのトランザクションでかけるロックの個数は少なくなる。
覚え方・ひっかけ注意
粒度大:ロックの個数が少ない(管理の負荷は小さい)が,待ちが増え同時実行性が下がる。粒度小:ロックの個数が多い(管理の負荷は大きい)が,待ちが減り同時実行性が上がる。このトレードオフの向きを逆にした選択肢がひっかけになる。
理論的背景
同時実行制御では,複数のトランザクションが同じデータを操作しても結果が直列に実行した場合と同じになる(直列化可能性)ことを保証するため,ロックを用いる。ロックの粒度の選択は,同時実行性(並行性)とロック管理のオーバヘッドのトレードオフである。粒度を小さくすると競合する範囲が狭まり並行性が高まるが,ロックの数が増えてロック表の管理や取得・解放の処理が重くなる。粒度を大きくするとその逆になる。DBMSには,多数の行ロックを取得したときに表ロックへ切り替えるロックエスカレーションや,上位の単位に「下位でロックしている」ことを示すインテンションロックなど,両者を両立させる仕組みがある。
実務での使われ方
オンライントランザクション処理(OLTP)では,多数の利用者が少量のデータを同時に更新するため,行単位のロックが一般的である。一方,夜間バッチで表全体を一括更新する場合などは,表ロックを使ってロック数を抑えることもある。多くのDBMSは多版同時実行制御(MVCC)を採用し,参照は過去の版を読むことで更新と競合しないようにして,ロックによる待ちを減らしている。
試験での位置づけ
基本情報では,ロックの粒度と同時実行性・オーバヘッドの関係,共有ロックと専有ロックの両立性が頻出。応用情報・データベーススペシャリストでは,2相ロック,デッドロック,トランザクションの隔離性水準(ダーティリード,ファントムなど)まで問われる。
選択肢の発展補足
b と d は,粒度を大きくしたときの効果の向きを逆にしたひっかけである。c は,参照を妨げるかどうかという「ロックの種類」の問題を「粒度」の問題にすり替えている。表全体を参照するときは,共有ロックを使えば他のトランザクションの参照とは両立するが,粒度を大きくすると更新しようとする他のトランザクションを表全体で待たせることになる。
出典と作り方
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成30年度 秋期 問29/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビ独自の3段階の解説(初級・標準・上級)です。

