0

奇妙な問題を抱えています。AJAXを介してSQLサーバーにクエリを実行するASP.NETアプリケーションをテストしています。アプリケーションはLINQ-to-SQLを使用して、結合で約8個程度のテーブルからデータをロードしており、SQLサーバーへの呼び出しがロックされ、戻らないことがあります。

私の最初の考えはそれが行き詰まっているということでした、しかし私が読んだことから、これが起こった場合、SQLサーバーは問題のあるスレッドの1つを殺すことを選ぶべきです。このアプリの場合、データベースにアクセスしている他のユーザーもいないので、これがどのように問題になるのかわかりません。

その他の症状:

  1. サーバーでのプロセッサの使用量は、この呼び出しを実行すると約40%に急上昇し、アプリケーションが閉じられた後(Visual Studioでは「停止」)でもそこにとどまります。

  2. サーバーは、トレイにあるVisual Studio Webサーバー(Cassini)に実際に移動して強制終了するまで、呼び出しを実行し続けます。

  3. SQLサーバーが実行していることを見ると、LINQ-to-SQL呼び出しを実行していることがわかりますが、異常なことは何もありません。

この「におい」がどのようなものかについて誰かが考えていますか?

ありがとう、サム

4

2 に答える 2

1

まず、SQLサーバーを最新のサービスパックレベルに更新します。そのサービスパック以降にリリースされた累積的な更新を調べて、特定の問題のように聞こえるかどうかを確認することをお勧めします。解決された可能性があります。

SQL Serverは、デッドロック内のアイテムの1つを強制終了することを選択しますが、クエリのタイムアウト設定が何であるかにも依存します。タイムアウトが十分に長い場合(300秒...)、SQLServerはしばらくの間呼び出しを実行し続ける可能性があります。

可能であれば、SQL呼び出しでテーブルにNOLOCKを使用して、非ブロッキング選択にすることができます。Linq-To-Sqlの場合、トランザクション分離レベルを[コミットされていない読み取り]に設定します。これはNOLOCKと同じです。

さらに、linq-to-sql呼び出しをトレースし、それらをsqlプロファイラーで再実行して、より適切なインデックスなど、もう少し適切に調整できるものがあるかどうかを確認します。

于 2010-01-06T15:25:58.990 に答える
0

トランザクションが開始されても完了しない場合、linqで同様の動作が見られます。

于 2010-02-26T05:16:57.380 に答える