IPA過去問ドリル

令和3年度 春期 情報処理安全確保支援士試験 午前Ⅱ 問21

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

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

出典:令和3年度 春期 情報処理安全確保支援士試験 午前Ⅱ 問21

正解:エ

解説

複数のバッチ処理を並行して動かす際にデッドロックの発生を回避するための代表的な設計ガイドラインとして,複数のレコードを更新する際にロックを掛ける順番(例えば,主キーの昇順など)をあらかじめ決めておき,全てのバッチ処理がその順序に従ってロックを取得するように設計する方法があります。全ての処理が同じ順序でロックを取得すれば,互いに相手のロックしたレコードを待ち合う循環待ちの状態(デッドロック)が発生しなくなります。

選択肢ごとの解説

  • 誤り。参照するレコードにまで専有ロックを掛けると,並行実行できる処理が減って処理性能が低下するとともに,デッドロックの発生を回避する対策にはなりません。
  • 誤り。大量データへの同じ処理をまとめて一つのトランザクションにすると,ロック保持期間が長くなり,かえってデッドロックや待ち時間の増加を招くおそれがあり,デッドロック回避の設計ガイドラインとして適切ではありません。
  • 誤り。トランザクション開始直後に必要な全レコードへ専有ロックを掛け,失敗時に再試行する方法は,ロック取得順序を統一していないため,依然としてデッドロックが発生する可能性があります。
  • 正しい。複数レコードを更新する際にロックを掛ける順番を決めておき,全てのバッチ処理がこれに従うように設計することで,循環的なロック待ち(デッドロック)の発生を回避できます。
情報処理安全確保支援士の過去問を演習モードで解く