デッドロック 【 deadlock 】
複数のプロセスが、同時に相手の必要とする資源に排他ロックをかけてしまい、
互いに相手の占有している資源の解放を待ってしまう状態で、
処理が進まなくなってしまう状態のこと。
処理中に、いったんデッドロックに陥ってしまったトランザクションは
永久に待ち状態になってしまい、
外部からの介入なしには抜け出すことができません。
そこで多くのRDBMS(関係データベース管理システム)では、
デッドロックを自動的に検出して解決する仕組みをあらかじめ備えるようにしています。
例えば、ロックを待機しているプロセスのリストを調べて
ループ状態になっていないかどうかをチェックしたり、
タイムアウト(時間切れ)を利用してデッドロックを検出させるようにです。
デッドロックに陥っているトランザクションがわかれば、
その一方に対して待機中のSQL文を強制的に失敗(異常終了)させて、
待機状態から抜け出させ、
残ったプロセスがトランザクションをロールバックしてロックを解放すれば、
もう一方のプロセスは 改めてロックを取得し、処理を再開することできるというわけです。
基本情報技術者 平成25年秋期
午前問31
"商品"表に対して,更新SQL文を実行するトランザクションが,
デッドロックの発生によって異常終了した。
異常終了後の"商品"表はどれか。
ここで,"商品"表に対する他のトランザクションは,参照は行うが更新はしないものとする。
〔更新SQL文〕
DELETE FROM 商品 WHERE 商品コード='BO2O'
デッドロックが起こった状態というのは、[更新SQL文]を実行しようとした時
「“商品”表に対して、参照のみの別のトランザクション」が 存在したということです。
この場合、[更新SQL文](削除するトランザクション)は削除を実行しないで、
待ちの状態になったままでした。
よって、異常終了後の“商品”表が、ロールバックされても、表に変化はありません。
【正答】イ




