- ベストアンサー
デッドロックはどうやったら、かかる?
SQLServer2000 を使っています。 デッドロックって、どういう状況下 で起こるものなのでしょうか? 具体例をあげて教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
デットロックは以下のような処理を順に 行うと発生します。 (1)ユーザーXがあるレコードAを更新する。 コミットしない。 (2)ユーザーYがあるレコードBを更新する。 コミットしない。 (3)ユーザーXがレコードBを更新。 (4)ユーザーYがレコードAを更新。 このとき、(3)の処理は、(2)が同じレコードを ロックしているために(2)が終わるまで 待たされてしまいます。 (2)のロックは、ユーザーYがコミットするまで 解除されませんが、ユーザーYは (4)を処理しています。 この、(4)の処理は、(1)が同じレコードを ロックしているので(1)が終わるまで、 待たされてしまいます。 しかし、その(1)のロックを解除するのに、 ユーザーXが(3)を処理中なので、 (3)が終わるまで、ロック解除できません。 ところが、その(3)の処理が終わるには...... 最初に戻っていまいますね。 これではいつまでたっても 処理が終了しません。 デットロックとはこんな状態のことを いいます。
その他の回答 (1)
- ranx
- ベストアンサー率24% (357/1463)
回答No.1
AさんとBさんが同時にデータベースにアクセスしました。 Aさんは資源Xを排他ロックして、今度は資源Yを使おうとしたら、 こちらは既にBさんが排他ロックしていたので、Bさんが使い終わるのを 待つことにしました。ところがBさんは資源Xを使おうとしてAさんが 使い終わるのを待っているところでした。かくして二人は永遠に 待ち続けることになるのでした。