応用情報技術者 2017年 春期 午前2 問29
問題文
トランザクションAとBが、共通の資源であるテーブルaとbを表に示すように更新するとき、デッドロックとなるのはどの時点か。ここで、表中の①〜⑧は処理の実行順序を示す。また、ロックはテーブルの更新直前にテーブル単位で行い、アンロックはトランザクション終了時に行うものとする。

選択肢
ア:③
イ:④
ウ:⑤
エ:⑥(正解)
トランザクションのデッドロック発生時点【午前2 解説】
要点まとめ
- 結論:デッドロックはトランザクションBがテーブルaのロックを取得しようとする⑥の時点で発生します。
- 根拠:トランザクションAは③でテーブルaをロックし、⑤でテーブルbをロック。トランザクションBは④でテーブルbをロック後、⑥でテーブルaのロックを要求し、相互にロック待ち状態となるためです。
- 差がつくポイント:ロックの取得順序とアンロックのタイミングを正確に理解し、相互に待ち状態になる条件を見抜くことが重要です。
正解の理由
トランザクションAは③でテーブルaをロックし、⑤でテーブルbをロックします。一方、トランザクションBは④でテーブルbをロックし、⑥でテーブルaのロックを要求します。
この時点で、トランザクションAはテーブルbのロックを保持し、トランザクションBはテーブルaのロックを保持しているため、互いに相手のロック解除を待つ状態(デッドロック)になります。
したがって、デッドロックが発生するのは⑥の操作時点です。
この時点で、トランザクションAはテーブルbのロックを保持し、トランザクションBはテーブルaのロックを保持しているため、互いに相手のロック解除を待つ状態(デッドロック)になります。
したがって、デッドロックが発生するのは⑥の操作時点です。
よくある誤解
ロックは取得直前に行い、アンロックはトランザクション終了時にまとめて行うため、途中でロックが解放されると誤解しがちです。
また、ロックの取得順序を無視して、単純に操作の順番だけで判断する誤りも多いです。
また、ロックの取得順序を無視して、単純に操作の順番だけで判断する誤りも多いです。
解法ステップ
- 各トランザクションのロック取得タイミングを確認する。
- トランザクションAは③でテーブルa、⑤でテーブルbをロックすることを把握。
- トランザクションBは④でテーブルb、⑥でテーブルaをロックすることを把握。
- それぞれのロック保持状態を時系列で追い、相手のロックを待つ状態が発生するか確認。
- ⑥の時点で相互にロック待ちとなり、デッドロックが発生することを特定。
選択肢別の誤答解説
- ア(③):トランザクションAがテーブルaをロックするだけで、まだ相手のロックを待っていないためデッドロックは発生しません。
- イ(④):トランザクションBがテーブルbをロックする段階で、トランザクションAはまだテーブルbをロックしていないためデッドロックは起きません。
- ウ(⑤):トランザクションAがテーブルbをロックする時点では、トランザクションBはまだテーブルaをロックしていないためデッドロックは発生しません。
- エ(⑥):トランザクションBがテーブルaのロックを要求した時点で、トランザクションAはテーブルbをロックしており、相互にロック待ち状態となるためデッドロックが発生します。
補足コラム
デッドロックは複数のトランザクションが互いに相手のロック解除を待つ状態で、システムの停止や処理遅延を引き起こします。
ロックの粒度(テーブル単位、行単位など)やロックの取得順序を工夫することで、デッドロックの発生を抑制できます。
また、デッドロック検出アルゴリズムやタイムアウト機構も重要な対策です。
ロックの粒度(テーブル単位、行単位など)やロックの取得順序を工夫することで、デッドロックの発生を抑制できます。
また、デッドロック検出アルゴリズムやタイムアウト機構も重要な対策です。
FAQ
Q: なぜロックは更新直前に取得し、アンロックはトランザクション終了時にまとめて行うのですか?
A: 更新直前にロックを取得することで、不要なロック保持時間を短縮し、同時実行性を高めます。アンロックは一括で行い、整合性を保ちます。
A: 更新直前にロックを取得することで、不要なロック保持時間を短縮し、同時実行性を高めます。アンロックは一括で行い、整合性を保ちます。
Q: デッドロックが発生した場合、システムはどう対処しますか?
A: 多くのDBMSはデッドロック検出後、どちらかのトランザクションを強制終了(ロールバック)して解消します。
A: 多くのDBMSはデッドロック検出後、どちらかのトランザクションを強制終了(ロールバック)して解消します。
関連キーワード: デッドロック、トランザクション制御、ロック機構、同時実行制御、排他制御

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

