いくつかの挿入/更新を実行するために SQL サーバーに接続しているアプリケーションがあります。デッドロックが発生していますが、デッドロックの報告に加えて、データベースへの接続が切断され、クライアントが再接続する必要があることに気付きました。
これは正常ですか?通常の動作ではない場合でも、SQL サーバーがクライアントがデッドロックの犠牲者になると判断するだけでなく、接続を終了している可能性はありますか?
接続が切断されるのを止める方法はありますか?
いくつかの挿入/更新を実行するために SQL サーバーに接続しているアプリケーションがあります。デッドロックが発生していますが、デッドロックの報告に加えて、データベースへの接続が切断され、クライアントが再接続する必要があることに気付きました。
これは正常ですか?通常の動作ではない場合でも、SQL サーバーがクライアントがデッドロックの犠牲者になると判断するだけでなく、接続を終了している可能性はありますか?
接続が切断されるのを止める方法はありますか?
定義上、デッドロックとは、SPID 1 には SPID 2 が必要とする何かがロックされており、SPID 2 には SPID 1 が必要とする何かがロックされているという 2 つの接続がスタックしていることを意味します。相手がロックしたものが必要なため、どちらもトランザクションを完了できません。このような場合、サーバーは被害者の SPID を選択してそれを強制終了し、他の SPID がトランザクションを完了できるようにします。
The only way to stop it is to figure out why the deadlocks are occurring in the first place. You can run a trace to monitor deadlocks and capture the information relating to them into a diagram and then view the diagram in SSMS.
More information available here: http://www.simple-talk.com/sql/learn-sql-server/how-to-track-down-deadlocks-using-sql-server-2005-profiler/