令和3年度 春期 情報処理安全確保支援士試験 午前II 問21
【問題21】
複数のバッチ処理を並行して動かすとき,デッドロックの発生をできるだけ回避したい。バッチ処理の設計ガイドラインのうち,適切なものはどれか。
参照するレコードにも,専有ロックを掛けるように設計する。
大量データに同じ処理を行うバッチ処理は,まとめて一つのトランザクションとして処理するように設計する。
トランザクション開始直後に,必要なレコード全てに専有ロックを掛ける。ロックに失敗したレコードには,しばらく待って再度ロックを掛けるように設計する。
複数レコードを更新するときの順番を決めておき,全てのバッチ処理がこれに従って処理するように設計する。
【解説】
ア: 参照するレコードにも,専有ロックを掛けるように設計する。
誤り。参照に対して専有ロックを掛けると、他のトランザクションがロック待ち状態になり、デッドロックの発生を増加させる可能性があります。
イ: 大量データに同じ処理を行うバッチ処理は,まとめて一つのトランザクションとして処理するように設計する。
誤り。大量データを一つのトランザクションで処理すると、トランザクションが長時間ロックを保持することになり、他の処理の進行を妨げる可能性があります。
ウ: トランザクション開始直後に,必要なレコード全てに専有ロックを掛ける。ロックに失敗したレコードには,しばらく待って再度ロックを掛けるように設計する。
誤り。しばらく待つという設計はデッドロックを回避する保証にはならず、全体のパフォーマンスを低下させる可能性があります。
エ: 複数レコードを更新するときの順番を決めておき,全てのバッチ処理がこれに従って処理するように設計する。
正しい。レコード更新の順番を統一することで、デッドロックの発生を回避できます。例えば、すべてのバッチ処理が同じ順序でロックを取得することで、競合状態が緩和されます。
【答え】
エ: 複数レコードを更新するときの順番を決めておき,全てのバッチ処理がこれに従って処理するように設計する。
出典:令和3年度 春期 情報処理安全確保支援士試験 午前II 問21