この概念が出た関連問題

この試験の対策ガイド

情報処理安全確保支援士試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は エ

解説

デッドロック(Deadlock)はデータベースやOSで、複数のトランザクション(プロセス)が互いに相手がロックしているリソースを待ち合う状態です。デッドロックを回避するための設計ガイドラインとして最も有効なのは「複数のリソースをロックする際に、全てのトランザクションが同じ順番でロックを取得するように設計する」ことです。設問の選択肢dの「複数レコードを更新するときにロックを掛ける順番を決めておき、全てのバッチ処理がこれに従って処理する」がこの方針に相当します。例えばAとBを常に「Aを先にロック、次にBをロック」の順番に固定すれば、A待ちとB待ちの循環が発生しません。

なぜ他の選択肢は違うのか

選択肢 ア
「参照するレコードにも専有ロックを掛けるように設計する」はデッドロック対策にはなりません。むしろ不必要な専有ロックの増加はデッドロックの可能性を高めます。参照のみの場合は共有ロック(READ LOCK)を使用し、専有ロックは更新時のみに限定する方がデッドロックリスクを低減できます。
選択肢 イ
「大量データに同じ処理を行うバッチ処理を、まとめて一つのトランザクションとして処理する」はデッドロック対策にはなりません。むしろ長時間のトランザクションは多くのリソースを長時間ロックするため、他のトランザクションとのデッドロックリスクが増加します。トランザクションは短く保つことが推奨されます。
選択肢 ウ
「トランザクション開始直後に必要なレコード全てに専有ロックを掛け、ロック失敗したレコードにはしばらく待って再度ロックを掛ける」は不完全な対策です。一部のリソースに対するロック取得に失敗した場合の待機と再試行の設計では、依然として循環待ちが発生する可能性があります。全リソースを一度に確保するか、順序固定が適切です。

解くときのポイント

デッドロック回避の基本策=「ロック取得の順序を全トランザクションで統一する」。他のデッドロック対策:①タイムアウト検出後のロールバック②デッドロック検出アルゴリズム(DBMS機能)③トランザクションを短くする(ロック保持時間を短縮)。「ロック順序の統一」が根本的な設計対策。