• ベストアンサー

デッドロックはどうやったら、かかる?

SQLServer2000 を使っています。 デッドロックって、どういう状況下 で起こるものなのでしょうか? 具体例をあげて教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • takopon
  • ベストアンサー率69% (27/39)
回答No.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さんが 使い終わるのを待っているところでした。かくして二人は永遠に 待ち続けることになるのでした。

関連するQ&A