平成28年度 春期 午前 問28
データベース
デッドロックに関する問題
トランザクション A(処理 A1→処理 A2 の順に実行する)とトランザクション B(処理 B1→処理 B2 の順に実行する)が,データベースの資源 S と T に対し,次のように処理 A1→処理 B1→処理 A2→処理 B2 の順で専有ロックを要求する場合,デッドロックが発生する資源の組合せはどれか。
なお,ロックは処理開始時にかけ,トランザクション終了時に解除する。
〔図〕(原典は時間軸の上に 2 本のトランザクションを並べた図)
トランザクションA [処理A1]→[処理A2]→[COMMIT]
トランザクションB [処理B1]→[処理B2]→[COMMIT]
──────────────────→ 時刻
※B は A より右にずれて描かれている = 処理 A1→処理 B1→処理 A2→処理 B2 の順。
| A1 | B1 | A2 | B2 | |
|---|---|---|---|---|
| ア | S | S | T | T |
| イ | S | T | T | S |
| ウ | T | S | T | S |
| エ | T | T | S | S |
- アS S T T
- イS T T S
- ウT S T S
- エT T S S
答えと解説を見る
✓ これが正解イS T T S
解説
同じ二つの資源を、逆の順に取りにいく組合せです。
設問のなお書きが効いています。ロックは処理の開始時にかけ、解除はトランザクションの終了時なので、先に取った資源は最後まで握り続けます。つまり二つ目の処理に入る時点で、そのトランザクションは資源を二つ抱えようとします。デッドロックは待ちが輪になった状態、すなわち互いに相手の持ち物を待つ形です。要求の順は固定されているので、順に追います。最初に片方が S を取り、次にもう片方が T を取ります。別の資源なのでどちらも取れます。続いて先の側が T を求めますが、これは相手が握っているので待ちに入ります。最後に後の側が S を求めますが、これも相手が握っているので待ちに入ります。両者が互いを待つので処理は進まなくなります。見分けは、二本のトランザクションの取得順が交差しているかどうかの一点です。防ぐには資源に順番を決めて全員が同じ順で取るようにします。
ほかの選択肢はなぜ違うのか
- アS S T T:どちらも一つ目に同じ資源を求める並びです。後から来た側がその場で足止めされるだけで、先に来た側は最後まで進んで解除するので、待ちは一方通行にとどまります。
- ウT S T S:二つ目に求める資源が、自分が一つ目で確保したものと同じになっています。すでに持っているものを改めて待つ必要はないため、どちらの側も止まりません。
- エT T S S:こちらも一つ目で二本が同じ資源を奪い合う並びです。片方が待たされるだけで、相手は自分の二つ目を取って終われるので、輪にはなりません。
この問題の用語
- トランザクションデータベースへの一連の処理をひとまとめにした単位のこと。途中で失敗すると開始前の状態へ戻され、中途半端な更新が残りません。
- データベースたくさんのデータを決まった形で貯め、探したり書き換えたりできるようにした仕組み。多くの人が同時に使うことを前提にしています。
出典:平成28年度 春期 応用情報技術者試験 午前 問28
同じ用語が出る問題
- 令和7年度 秋期 午前 問29:多版同時実行制御に関する問題(トランザクション)
- 令和6年度 秋期 午前 問31:チェックポイントに関する記述(トランザクション)
- 令和6年度 秋期 午前 問27:ロールバックに関する問題(トランザクション)
- 令和6年度 秋期 午前 問12(トランザクション)
- 令和6年度 春期 午前 問55:SaaSに関する問題(トランザクション)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)