令和3年度 春期 午前Ⅱ 問21
データベース
デッドロックに関する問題
複数のバッチ処理を並行して動かすとき,デッドロックの発生をできるだけ回避したい。バッチ処理の設計ガイドラインのうち,適切なものはどれか。
- ア参照するレコードにも,専有ロックを掛けるように設計する。
- イ大量データに同じ処理を行うバッチ処理は,まとめて一つのトランザクションとして処理するように設計する。
- ウトランザクション開始直後に,必要なレコード全てに専有ロックを掛ける。ロックに失敗したレコードには,しばらく待って再度ロックを掛けるように設計する。
- エ複数レコードを更新するときにロックを掛ける順番を決めておき,全てのバッチ処理がこれに従って処理するように設計する。
答えと解説を見る
✓ これが正解エ複数レコードを更新するときにロックを掛ける順番を決めておき,全てのバッチ処理がこれに従って処理するように設計する。
解説
ロックを掛ける順番を全処理でそろえると、循環した待ちが起きません。
デッドロックは、複数の処理が互いに相手の持つロックの解放を待ち合い、どれも先へ進めなくなる状態です。たとえば、ある処理がレコードAからBの順に、別の処理がBからAの順にロックを掛けると、互いに待ち合う可能性があります。すべてのバッチ処理が同じ順番でロックを掛けるように決めておけば、このような循環した待ちが生じません。待ちの輪ができない仕組みかどうかが判断の軸です。
ほかの選択肢はなぜ違うのか
- ア参照するレコードにも,専有ロックを掛ける…:参照するだけのレコードにまで専有ロックを掛けると、他の処理と競合する機会が増えます。ロックを待つ場面が増えるので、デッドロックはかえって起きやすくなり、回避の方針としては逆効果です。
- イ大量データに同じ処理を行うバッチ処理は,…:大量のデータをまとめて一つのトランザクションで処理すると、多くのロックを長い時間抱え込むことになります。他の処理との競合が増えるので、デッドロックを避けるための設計としては適切ではありません。
- ウトランザクション開始直後に,必要なレコー…:開始直後にロックを掛けても、失敗したレコードを待つ間は、すでに取れたロックを保持したままです。保持と待ちが重なるので、他の処理と互いに待ち合う形が残り、デッドロックは避けられません。
この問題の用語
- トランザクションデータベースへの一連の処理をひとまとめにした単位のこと。途中で失敗すると開始前の状態へ戻され、中途半端な更新が残りません。
出典:令和3年度 春期 情報処理安全確保支援士試験 午前Ⅱ 問21
同じ用語が出る問題
- 令和7年度 秋期 午前Ⅱ 問21:コミット処理を完了するタイミング(トランザクション)
- 令和2年度 10月 午前Ⅱ 問21:コミット処理を完了するタイミング(トランザクション)
- 平成30年度 春期 午前Ⅱ 問21:コミットに関する問題(トランザクション)
- 平成27年度 春期 情報セキュリティスペシャリスト試験 午前Ⅱ 問21:2相コミットプロトコルの問題(トランザクション)
- 平成26年度 秋期 情報セキュリティスペシャリスト試験 午前Ⅱ 問21:デッドロックが発生しているもの(トランザクション)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)