令和4年度 秋期 データベーススペシャリスト試験 午前II 問13
2025年6月30日
【問題13】
複数のバッチ処理を並行して動かすとき、デッドロックの発生をできるだけ回避したい。バッチ処理の設計ガイドラインのうち、適切なものはどれか。
参照するレコードにも、専有ロックを掛けるように設計する。
大量データに同じ処理を行うバッチ処理は、まとめて一つのトランザクションとして処理するように設計する。
トランザクション開始直後に、必要なレコード全てに専有ロックを掛ける。ロックに失敗したレコードには、しばらく待って再度ロックを掛けるように設計する。
複数レコードを更新するときにロックを掛ける順番を決めておき、全てのバッチ処理がこれに従って処理するように設計する。
【解説】
ア: 参照するレコードにも、専有ロックを掛けるように設計する。
誤り。参照するレコードに専有ロックを掛けると、ロック競合が発生しやすくなり、デッドロックのリスクが高まります。
イ: 大量データに同じ処理を行うバッチ処理は、まとめて一つのトランザクションとして処理するように設計する。
誤り。一つのトランザクションで処理をまとめると、トランザクションの時間が長くなり、ロック競合やデッドロックのリスクが増加します。
ウ: トランザクション開始直後に、必要なレコード全てに専有ロックを掛ける。ロックに失敗したレコードには、しばらく待って再度ロックを掛けるように設計する。
誤り。全てのレコードに専有ロックを掛けることは、ロック競合の原因となり、デッドロックを引き起こす可能性があります。
エ: 複数レコードを更新するときにロックを掛ける順番を決めておき、全てのバッチ処理がこれに従って処理するように設計する。
正しい。ロックの順番を統一することで、複数のトランザクションが競合した場合でもデッドロックのリスクを軽減することができます。
【答え】
エ: 複数レコードを更新するときにロックを掛ける順番を決めておき、全てのバッチ処理がこれに従って処理するように設計する。
出典:令和4年度 秋期 データベーススペシャリスト試験 午前II 問13