IPA過去問ドリル

平成25年度 春期 データベーススペシャリスト試験 午前Ⅱ 問17

テクノロジ/データベース

複数のバッチ処理を並行して動かすとき,デッドロックの発生をできるだけ回避したい。バッチ処理の設計ガイドラインのうち,適切なものはどれか。

出典:平成25年度 春期 データベーススペシャリスト試験 午前Ⅱ 問17

正解:エ

解説

複数のバッチ処理を並行して実行する際にデッドロックを回避するための代表的な設計手法は,複数のレコードを更新する順序をあらかじめ統一的に決めておき,全てのバッチ処理がその順序に従ってロックを取得・更新するように設計することである。これによって,異なるバッチ処理間でロック取得の順序が食い違うことによる循環待ち(デッドロック)の発生を防ぐことができる。

選択肢ごとの解説

  • 誤り。参照するだけのレコードにまで専有ロックをかけると,本来共存できたはずの参照処理同士がロック待ちになり,ロックの競合やデッドロックの危険性はむしろ高まる。
  • 誤り。大量データへの処理を一つの巨大なトランザクションにまとめると,ロックを保持する時間が長くなり,他の処理との競合やデッドロックの危険性が高まる。
  • 誤り。トランザクション開始直後に必要な全レコードへ一括して専有ロックをかけ,失敗時に再試行させるという方式では,複数のバッチ処理が互いに一部のロックを取得し合ったまま待ち合う状況(デッドロック)を防ぐことができない。
  • 正しい。複数レコードを更新する際の順序をあらかじめ統一しておき,全てのバッチ処理がその順序に従ってロックを取得するように設計すれば,異なる処理間でロック取得順序が入れ違うことによる循環待ち(デッドロック)を防止できる。
データベーススペシャリストの過去問を演習モードで解く