令和3年度 春期 情報処理安全確保支援士試験 午前Ⅱ 問21
テクノロジ/データベース複数のバッチ処理を並行して動かすとき,デッドロックの発生をできるだけ回避したい。バッチ処理の設計ガイドラインのうち,適切なものはどれか。
出典:令和3年度 春期 情報処理安全確保支援士試験 午前Ⅱ 問21
- ア参照するレコードにも,専有ロックを掛けるように設計する。
- イ大量データに同じ処理を行うバッチ処理は,まとめて一つのトランザクションとして処理するように設計する。
- ウトランザクション開始直後に,必要なレコード全てに専有ロックを掛ける。ロックに失敗したレコードには,しばらく待って再度ロックを掛けるように設計する。
- エ複数レコードを更新するときにロックを掛ける順番を決めておき,全てのバッチ処理がこれに従って処理するように設計する。
正解:エ
解説
複数のバッチ処理を並行して動かす際にデッドロックの発生を回避するための代表的な設計ガイドラインとして,複数のレコードを更新する際にロックを掛ける順番(例えば,主キーの昇順など)をあらかじめ決めておき,全てのバッチ処理がその順序に従ってロックを取得するように設計する方法があります。全ての処理が同じ順序でロックを取得すれば,互いに相手のロックしたレコードを待ち合う循環待ちの状態(デッドロック)が発生しなくなります。
選択肢ごとの解説
- ア誤り。参照するレコードにまで専有ロックを掛けると,並行実行できる処理が減って処理性能が低下するとともに,デッドロックの発生を回避する対策にはなりません。
- イ誤り。大量データへの同じ処理をまとめて一つのトランザクションにすると,ロック保持期間が長くなり,かえってデッドロックや待ち時間の増加を招くおそれがあり,デッドロック回避の設計ガイドラインとして適切ではありません。
- ウ誤り。トランザクション開始直後に必要な全レコードへ専有ロックを掛け,失敗時に再試行する方法は,ロック取得順序を統一していないため,依然としてデッドロックが発生する可能性があります。
- エ正しい。複数レコードを更新する際にロックを掛ける順番を決めておき,全てのバッチ処理がこれに従うように設計することで,循環的なロック待ち(デッドロック)の発生を回避できます。