複数のバッチ処理を並行して動かすとき、デッドロックの発生をできるだけ回避したい。バッチ処理の設計ガイドラインのうち、適切なものはどれか。
ロックの獲得順序をそろえれば循環待ちは生じない
選択肢
- ア参照するレコードにも、専有ロックを掛けるように設計する。
- イ大量データに同じ処理を行うバッチ処理は、まとめて一つのトランザクションとして処理するように設計する。
- ウトランザクション開始直後に、必要なレコード全てに専有ロックを掛ける。ロックに失敗したレコードには、しばらく待って再度ロックを掛けるように設計する。
- エ複数レコードを更新するときにロックを掛ける順番を決めておき、全てのバッチ処理がこれに従って処理するように設計する。
正解と解説
正解:エ 複数レコードを更新するときにロックを掛ける順番を決めておき、全てのバッチ処理がこれに従って処理するように設計する。
デッドロックは、複数の処理が資源を互いに逆の順序で確保しようとして待ち合うことで起こる。そこで更新対象にあらかじめ一定の順序を決め、すべての処理が同じ順序でロックを取るようにすれば、循環した待ちが生じなくなる。よってエが適切である。
選択肢ごとの解説
- ア参照だけの行にまで専有ロックを掛けると競合が増え、かえってデッドロックを招きやすくなる。
- イ大量データを1つのトランザクションにまとめるとロックの保持時間と範囲が広がり、競合の危険が高まる。
- ウ先に一括ロックする方法は待ちを減らす発想ではあるが、獲得順序が処理ごとに異なれば循環待ちは解消されない。
- エ正解。ロックの獲得順序を全処理でそろえることで、循環した待ち合いが原理的に生じなくなる。
同じ分野の他の問題
- DBMSにおいて、トランザクション間でデッドロックが発生していることを検出するために使用するものはどれか。2016年度 春期 午前II 問13
- トランザクションA〜Gの待ちグラフにおいて、永久待ちの状態になっているトランザクション全てを列挙したものはどれか。ここで…2024年度 秋期 午前II 問13
- RDBMSのロックに関する記述のうち、適切なものはどれか。ここで、X,Yはトランザクションとする。2021年度 秋期 午前II 問14
- t1〜t10の時刻でスケジュールされたトランザクションT1〜T4がある。時刻t10でT1がcommitを発行する直前の、…2019年度 春期 午前II 問10
- DBMSにおいて、デッドロックを検出するために使われるデータ構造はどれか。2018年度 春期 午前II 問16
最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。