平成25年度 春期 午前Ⅱ 問17
トランザクション処理
デッドロックに関する問題
複数のバッチ処理を並行して動かすとき,デッドロックの発生をできるだけ回避したい。バッチ処理の設計ガイドラインのうち,適切なものはどれか。
- ア参照するレコードにも,専有ロックをかけるように設計する。
- イ大量データに同じ処理を行うバッチ処理は,まとめて一つのトランザクションとして処理するように設計する。
- ウトランザクション開始直後に,必要なレコード全てに専有ロックをかける。ロックに失敗したレコードには,しばらく待って再度ロックをかけるように設計する。
- エ複数レコードを更新するときの順番を決めておき,全てのバッチ処理がこれに従って処理するように設計する。
答えと解説を見る
✓ これが正解エ複数レコードを更新するときの順番を決めておき,全てのバッチ処理がこれに従って処理するように設計する。
解説
更新の順番を全処理でそろえれば、待ちが輪にならずデッドロックを避けられます。
デッドロックは、二つ以上のトランザクションが、互いに相手のロックしている資源の解放を待ち合って先へ進めなくなる状態です。例えば一方がレコード X、Y の順に、もう一方が Y、X の順に専有ロックをかけると、それぞれが一つ目を確保したところで相手を待ち合う形になります。全てのバッチ処理がレコードを更新する順番を同じに決めておけば、どの処理も同じ順にロックを取りにいくので、待ちが輪になる形が生じません。デッドロックの回避策は、待ちの輪ができる条件をどこで断つかで比べると選べます。
ほかの選択肢はなぜ違うのか
- ア参照するレコードにも,専有ロックをかける…:参照するだけのレコードにも専有ロックをかけると、共有ロックどうしなら同時に読めた処理まで互いに待つようになります。ロックの衝突が増えるので、デッドロックはむしろ起こりやすくなります。
- イ大量データに同じ処理を行うバッチ処理は,…:大量のデータを一つのトランザクションにまとめると、多くのレコードのロックを長い時間持ち続けることになります。ほかの処理と衝突する機会が増え、デッドロックを避ける方向とは逆の設計です。
- ウトランザクション開始直後に,必要なレコー…:確保できたロックを持ったまま、失敗したレコードを待って取り直す設計です。ほかの処理も同じように持ちながら待つと、互いの解放を待ち合う形はなくならず、デッドロックの回避になりません。
この問題の用語
- トランザクションデータベースへの一連の処理をひとまとめにした単位のこと。途中で失敗すると開始前の状態へ戻され、中途半端な更新が残りません。
出典:平成25年度 春期 データベーススペシャリスト試験 午前Ⅱ 問17
同じ用語が出る問題
- 令和7年度 秋期 午前Ⅱ 問18:ブロックチェーンに関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問17:デッドロックに関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問16(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問15:隔離性水準に関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問14:べき等に関する問題(トランザクション)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)