戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

データベーススペシャリスト 2010年 午前218


問題文

DBMSのトランザクション管理に関する記述のうち、適切なものはどれか。

選択肢

2相ロック方式は、分散型データベースのための制御方式であり、集中型データベースでは使用されない。
資源をロックする時間の長さのことをロックの粒度といい、この粒度が細かいほど、トランザクションのスループットは向上する。
ダーティリードを許すなど、隔離性水準を下げると、トランザクションのスループットは低下する。
同時実行制御の目的は、データベースの一貫性を保ちながら複数のトランザクションを並行に処理することである。(正解)

🔒 解説は解答すると表示されます

同時実行制御【午前2解説】

正解の理由

同時実行制御の目的は、データベースの一貫性(整合性)を保ちながら複数トランザクションを並行処理して性能を引き出すことです。選択肢はこの目的を正しく表しており、ACID のうち「一貫性(Consistency)」と「独立性/隔離性(Isolation)」を両立させつつ並列実行を可能にする点を述べています。並行実行制御は、競合する更新や読み取りがデータ不整合やアノマリを引き起こさないように設計されます。

解法ステップ

  1. 設問が問う概念(同時実行制御の目的)を確認する。
  2. 各選択肢を定義・効果と照らして検証する(2相ロックの性質、ロック粒度の定義、隔離レベルとスループットの関係など)。
  3. 定義やトレードオフに合致するものを選ぶ(正しい一般説明かどうかを見極める)。

選択肢別の誤答解説

  • ア: 「2相ロック方式は、分散型のための制御方式であり集中型では使用されない」──誤り。2相ロック(2PL)は集中型・分散型の双方で用いられる基本的な同時実行制御手法です。分散環境では分散ロックや分散トランザクション制御(例:2フェーズコミット)と組み合わせて使われることが多いですが、「集中型で使用されない」という記述は事実と反します。
  • イ: 「ロックの粒度は資源をロックする時間の長さ」──誤り。ロックの粒度(granularity)はロックするデータ単位の大きさ(例:データベース、テーブル、ページ、行、列)を指します。粒度が細かい(例えば行ロック)は一般に並行性を高める一方でロック管理のオーバーヘッドが増えます。必ずしも「粒度が細かいほどスループットが向上する」とは限らず、トレードオフを考慮する必要があります。
  • ウ: 「隔離性水準を下げるとトランザクションのスループットは低下する」──誤り。一般に隔離レベルを下げる(例:Serializable → Read Committed → Read Uncommitted)と排他制御が緩和され、並行性が向上してスループットは改善することが多いです。その代わりにダーティリードやファントムなどのアノマリが許容されるリスクが増します。したがって記述は逆です。
  • エ: 上述のとおり、データ一貫性を保ちながら並行処理することが同時実行制御の目的であり正しい説明です。

よくある誤解

  • 2相ロック(2PL)はデッドロックを防止する、という誤解。実際は 2PL は直列化可能性(serializability)を保証しますが、デッドロックが発生し得ます。デッドロック対策(タイムアウト、wait-die/wound-wait、検出と回復など)が別途必要です。
  • 厳密(Strict)2PL と 2PL を混同する誤解。厳密2PL は全ての排他ロックをトランザクション終了(コミット/ロールバック)まで保持するので、カスケード中止(cascading abort)を防ぎ、回復を容易にしますが、これもデッドロックを完全には避けません。
  • ロック粒度を「ロック時間」の意味で覚えていること。粒度は「どの単位をロックするか」であり、時間は別の設計要素(ロック保持時間、タイムアウトなど)です。

補足コラム

主要な同時実行制御方式には次がある:
  • ロックベース(2PL 等):書き込み・読み取りにロックを使う。容易に直列化可能性を実現できる。
  • タイムスタンプ方式:各トランザクションに時刻を割り当てることで順序を決める。
  • 楽観的制御(オプティミスティック):コミット時に競合検査を行う(読み取り主体のワークロード向き)。
  • マルチバージョン(MVCC):読み取りはロックを取らず過去バージョンを参照することで高い並行性を実現(多くの商用DBが採用)。
デッドロックの扱い:
  • 予防(例:資源の順序付け、事前に全ロック取得)→ システム設計で完全回避可能だが実用上制約あり。
  • 回避(wait-die, wound-wait)→ タイムスタンプを用いる等。
  • 検出と回復(wait-for グラフで検出してロールバック)→ よく使われる実装。

FAQ

Q: 2相ロックは何を保証する?
A: 2PL は直列化可能性(serializability)を保証します。厳密2PLはさらにカスケード中止を防ぎ回復を容易にしますが、デッドロックは別途対処が必要です。
Q: ロック粒度はどのように選ぶべきか?
A: ワークロード次第です。更新が多ければ粒度を細かく(行ロック)して並行性を稼ぎ、読み取りが多くロック管理コストが気になる場合は粗い粒度(テーブルロック)も検討します。MVCC を使えるなら読み取りの競合を低減できます。
Q: 隔離レベルを下げると安全性はどうなる?
A: 隔離レベルを下げるとスループットは向上しやすいが、ダーティリードやリピート不可読(non-repeatable read)、ファントムなどのアノマリが発生するリスクがあります。用途に応じてトレードオフを選択します。

関連キーワード: トランザクション、同時実行制御、2相ロック、厳密2PL、ロック粒度、隔離レベル、デッドロック、MVCC
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリスト
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について