質問: NHibernate SQL Server中断されたプロセス 誰かが私にある方向性を与えるのを助けることを望んでいるという問題にぶつかった。 .NET 3.5とNHibernate 1.2で、数年後のアプリケーションで作業する。 先週、トランザクションがランダムにロックアップするように見える問題が発生しました。私はNHが100000のコマンドタイムアウトを持っていることに気付きました。私は今、100000が狂っているようにこれを30に引き下げました!問題はまだ発生しています。 SQL Serverアクティビティモニタは、問題が発生したとき、通常は強制停止状態のブロッキングトランザクションを表示します。私がブロックプロセスを停止すると、ブロックされているプロセスがブロックされ、システムは正常です。 ブロッキングプロセスのチェックを実行すると、問題の原因となっているSQL文が実行されているのを見ることができますが、ほとんどのページで共通のデータを取得してシステムの多くを実行するステートメントです。 私はこれを引き起こしたと思いますか?何も明らかではありません...我々はいくつかの小さな変更をいくつかリリースしましたが、それらのどれもがこの効果を持つべきではありません。 Windowsアップデート/サービスパックは、最近、同じ時期にインストールされました。 SQL/.NET SPの更新がこの問題の原因になるのですか? 私はここにたくさんあるが、瞬間に私が持っているものを与えることを試みていることを知っている。 新しい情報: command_tinmeoutが30秒に更新されたので、この実行時間を超過したクエリは自動的に強制終了されます。つまり、Activity Monitorに表示されます。しかし、繰り返しクエリがタイムアウトすると失敗するため、他に何かが起きているようです。しかし、アプリケーションプールを停止して開始すると、少なくともしばらくの間、すべて正常に動作し始めます。
回答: あなたがブロッキングと見なす非常に一般的なクエリであると言うとき、それは最も一般的に実行されるため、データベース内のロックを待っている可能性が最も高いためです。 What isolation level is the database running in, if its out of the box setting it is in most cases very feasible for performance to switch it to snapshot isolation to avoid readers waiting for writers. More info on Snapshot isolation これを引き起こした原因を考えて、遅い書き込みクエリを導入したり、データが大きくなったり、データの断片化が突然発生したりした可能性があります。