ホーム > 情報処理安全確保支援士試験 > 2021年 春期
情報処理安全確保支援士試験 2021年 春期 午前2 問21
複数のバッチ処理を並行して動かすときデッドロックの発生をできるだけ回避したいバッチ処理の設計ガイドラインのうち適切なものはどれか。
ア:参照するレコードにも、専有ロックを掛けるように設計する。
イ:大量データに同じ処理を行うバッチ処理は、まとめて一つのトランザクションとして処理するように設計する。
ウ:トランザクション開始直後に、必要なレコード全てに専有ロックを掛ける。ロックに失敗したレコードにはしばらく待って再度ロックを掛けるように設計する。
エ:複数レコードを更新するときにロックを掛ける順番を決めておき、全てのバッチ処理がこれに従って処理するように設計する。(正解)
解説
複数のバッチ処理でデッドロックを回避する設計ガイドライン【午前2 解説】
要点まとめ
- 結論:複数レコードのロック順序を統一し、全バッチ処理で同じ順序に従う設計がデッドロック回避に効果的です。
- 根拠:デッドロックは複数の処理が互いに相手のロック解除を待つ状態で発生し、ロック順序の不一致が主な原因となります。
- 差がつくポイント:ロックの範囲やタイミングではなく、ロックの順序を全処理で統一することが最も重要です。
正解の理由
選択肢エは「複数レコードを更新するときにロックを掛ける順番を決めておき、全てのバッチ処理がこれに従う」ことを推奨しています。
これはデッドロックの典型的な原因である「循環待ち」を防ぐための基本的な設計手法です。
ロック順序を統一することで、複数の処理が互いにロックを奪い合う状況を回避し、デッドロックの発生確率を大幅に下げられます。
これはデッドロックの典型的な原因である「循環待ち」を防ぐための基本的な設計手法です。
ロック順序を統一することで、複数の処理が互いにロックを奪い合う状況を回避し、デッドロックの発生確率を大幅に下げられます。
よくある誤解
ロックを多く掛ければ安全と考えがちですが、過剰なロックは逆にデッドロックや性能低下を招きます。
また、トランザクションを大きくまとめることが必ずしも良いとは限りません。
また、トランザクションを大きくまとめることが必ずしも良いとは限りません。
解法ステップ
- デッドロックの原因を理解する(循環待ち状態の発生)。
- ロックの範囲やタイミングよりも「ロック順序の統一」が効果的であることを確認。
- 選択肢の中で「ロック順序を決めて全処理が従う」設計を選ぶ。
- 他の選択肢がデッドロック回避に逆効果かどうかを検討。
- 正解はエと判断する。
選択肢別の誤答解説
- ア: 参照にも専有ロックを掛けるとロック競合が増え、デッドロックのリスクが高まります。
- イ: 大量データを一つのトランザクションで処理するとロック保持時間が長くなり、デッドロックや性能低下を招きます。
- ウ: トランザクション開始直後に全レコードにロックを掛けるのはロック競合を増やし、待機時間も長くなりやすいです。
- エ: ロック順序を統一し、全バッチ処理が従うことでデッドロックを効果的に回避できる。
補足コラム
デッドロック回避の基本は「循環待ちの防止」です。
ロック順序の統一は「資源獲得の順序を固定する」ことで、循環待ちを物理的に起こらなくします。
また、タイムアウト設定やデッドロック検出機能も補助的に用いられますが、設計段階での順序統一が最も根本的な対策です。
ロック順序の統一は「資源獲得の順序を固定する」ことで、循環待ちを物理的に起こらなくします。
また、タイムアウト設定やデッドロック検出機能も補助的に用いられますが、設計段階での順序統一が最も根本的な対策です。
FAQ
Q: なぜ参照にも専有ロックを掛けるのは良くないのですか?
A: 参照時に専有ロックを掛けると、他の処理がそのレコードを更新できずロック競合が増え、デッドロックのリスクが高まるためです。
A: 参照時に専有ロックを掛けると、他の処理がそのレコードを更新できずロック競合が増え、デッドロックのリスクが高まるためです。
Q: トランザクションを大きくまとめると何が問題ですか?
A: トランザクションが長時間ロックを保持するため、他の処理が待たされやすくなり、デッドロックや性能低下の原因になります。
A: トランザクションが長時間ロックを保持するため、他の処理が待たされやすくなり、デッドロックや性能低下の原因になります。
関連キーワード: デッドロック回避, ロック順序, バッチ処理設計, トランザクション管理, 専有ロック