基本情報技術者 2018年 春期 午前(科目A) 問30
問題文
RDBMSのロックの粒度に関する次の記述において、a, bの組合せとして適切なものはどれか。
並行に処理される二つのトランザクションがそれぞれ一つの表内の複数の行を更新する。行単位のロックを使用する場合と表単位のロックを使用する場合とを比べると、ロックの競合がより起こりやすいのは[ a ]単位のロックを使用する場合である。また、トランザクション実行中にロックを管理するためのRDBMSのメモリ使用領域がより多く必要になるのは[ b ]単位のロックを使用する場合である。

選択肢
ア:
イ:
ウ:(正解)
エ:
🔒 解説は解答すると表示されます
ロックの粒度と競合・メモリ影響【午前解説】
正解の理由
設問では「二つのトランザクションがそれぞれ一つの表内の複数の行を更新する」状況を想定しています。
- a(ロック競合がより起こりやすい)の観点では、表単位ロックは一方のトランザクションが表全体をロックするともう一方は待たされるため競合が高くなります。
- b(トランザクション実行中にRDBMSが使用するメモリがより多く必要)の観点では、行単位ロックは更新する各行ごとにロック情報を保持するため、管理するロック数が増えメモリ使用量が大きくなります。
したがって a = 表、b = 行 の組合せ(選択肢 ウ)が正解です。
解法ステップ
- 設問の状況を確認:複数行を更新する二つのトランザクションが同一表で並行実行される。
- 「競合がより起こりやすい」観点で比較:表ロックは単一ロックで表全体を占有するため競合が高い。
- 「ロック管理のメモリ使用量」観点で比較:行ロックは更新する行ごとにロックを保持するためロック数・メモリが増える。
- 結果を選択肢に当てはめる:a=表、b=行 → ウが正解。
選択肢別の誤答解説
- ア(a: 行、b: 行)
誤り。行ロックは競合を減らす性質があるため「競合がより起こりやすい」は行ではない。 - イ(a: 行、b: 表)
誤り。aで行を選ぶと競合が起きやすいとするが、競合は表ロックの方が起こりやすい。bで表を選ぶとメモリ使用が多いとするが実際は行ロックで管理コストが増える。 - ウ(a: 表、b: 行)
正解。表ロックは競合が起きやすく、行ロックはロック数が増えてRDBMSのメモリ使用が増加するため、問題の記述に合致します。 - エ(a: 表、b: 表)
誤り。表ロックが競合しやすい点は合っているが、ロック管理のメモリ使用量は表ロックよりも行ロックのほうが多くなるため b=表 は不適切。
よくある誤解
- 「行ロックのほうが常に競合が多い」と誤解する人がいますが、実際は行ロックのほうが細粒度で衝突は減ります。
- 「ロック管理のメモリ負荷は無視できる」と考えがちですが、大量の行を同時にロックするとロックテーブルや管理情報でメモリ負荷が増加します。
- 「表ロック=良くない」と単純に決めつけるのも誤りで、更新対象がテーブル全体に及ぶバッチ処理などでは表ロックの方が効率的な場合があります。
補足コラム
- ロック粒度のトレードオフは「同時実行性(Concurrency)」対「オーバーヘッド(管理コスト)」です。行ロックは高い同時実行性を実現しますが、ロックの取得/管理/解放に伴うオーバーヘッドとデッドロックの発生確率が上がります。
- 多くのRDBMSは状況に応じて「ロックエスカレーション(複数の行ロックからテーブルロックへ昇格)」を行い、ロックテーブルの肥大化を防ぐ仕組みを持ちます。
- 実運用では、更新対象の範囲、トランザクションの長さ、同時接続数を考慮してロック戦略(行ロック、ページロック、表ロック、楽観的ロック等)を選択します。
FAQ
Q1. 行ロックだと必ずデッドロックが多発しますか?
A1. 必ずというわけではありませんが、多数の行を短時間に複数トランザクションが異なる順序でロックするとデッドロックの可能性は高まります。設計でロック順序を統一するなど対策が有効です。
A1. 必ずというわけではありませんが、多数の行を短時間に複数トランザクションが異なる順序でロックするとデッドロックの可能性は高まります。設計でロック順序を統一するなど対策が有効です。
Q2. 小規模なバッチ処理では表ロックの方が速いですか?
A2. はい。更新対象がテーブル全体や大量の行に及ぶ場合、表ロックの方がロック管理オーバーヘッドが小さく効率的になる場合があります。
A2. はい。更新対象がテーブル全体や大量の行に及ぶ場合、表ロックの方がロック管理オーバーヘッドが小さく効率的になる場合があります。
Q3. ロック粒度はどのように設定すべきですか?
A3. アプリケーションの同時実行性要件、トランザクションの性質、ハードウェア資源を総合的に評価して選択します。プロファイリングや負荷試験で確認することを推奨します。
A3. アプリケーションの同時実行性要件、トランザクションの性質、ハードウェア資源を総合的に評価して選択します。プロファイリングや負荷試験で確認することを推奨します。
関連キーワード: ロック粒度、行ロック、表ロック、排他制御、ロック管理、デッドロック、ロックエスカレーション、トランザクション、RDBMS、同時実行性

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

