2009-07-23 12 views
0

非常に簡単なクエリ(通常は非常に速い)を実行する簡単な.Net Webサービスを作成しました。クエリは次のようなものです。.Net 2.0とSQL Server 2008のハングプロセス

SELECT v.email 
FROM dbo.Reporting r 
INNER JOIN dbo.Reporting_EmailList el ON r.reportID = el.reportID 
INNER JOIN OtherDB.dbo.V_ActiveDir v ON el.userGUID = v.objectGUID 
WHERE r.reportID = @reportID 

V_ActiveDirは、アクティブなディレクトリデータのビューです。このクエリは、基本的に、レポートを電子メールで送信する電子メールアドレスのリストを取得します。私のレポーティングテーブルには現在、3つのレコードしかありません。私はレポーティングテーブルにフィールドを追加しようとしていましたが、これは永遠に取っていました。このクエリがSQLプロセスでハングしていたことがわかりました。その日の早いうちに、このスクリプトは次のエラーを生成しました:

Timeout expired. The timeout period elapsed prior to completion 
of the operation or the server is not responding. 

...私は吊り下ろしプロセスを説明しています。私たちはそれを強制終了しようとしましたが、現在はロールバック状態にあり、SQL Serverを再起動する必要があると思います(選択クエリがロールバックしようとするのは気になりません)。これが再び発生するのを防ぐために、SQL Serverまたは.NETのいずれかの方法はありますか?または、SQLでこのプロセスを削除する方法は...スレッドプールに何かがぶら下がっている可能性がありますか?私はまだレポーティングテーブルから選択することができますので、テーブルロックを解除しないでください。このテーブルを変更しようとすると、ホイールが回転します。

私はIISにアクセスしていないため、経験は豊富ですが、提案があればそれを渡すことができます。

編集:私のcatchステートメントでSqlConnectionが開いているかどうかをチェックしていないので、これが原因である可能性があります。

答えて

0

まず、リカバリ状態(例:上記のロールバック)であれば、SQLを再起動しないでください。

通常、ASP.NETクエリは30秒または60秒でタイムアウトします。次のフィールドがインデックス化されている場合

チェック:

  • dbo.Reporting.ReportID、
  • dbo.Reporting_EmailList.ReportID
  • dbo.Reporting_EmailList.userGUID
  • OtherDB.dbo.V_ActiveDir.objectGUID (下にある表の中)

どこにOtherDBがありますか?それはリンクされたデータベースですか?これは問題の一部になる可能性があります。

このクエリのクエリプランはどのように見えますか?そこに疑わしいものは何も見えますか?