非常に単純なクエリを実行する単純な.NetWebサービスを作成しました(通常は非常に高速であるはずです)。クエリは次のようなものです。
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は、ActiveDirectoryデータのビューです。このクエリは、基本的に、レポートの電子メール送信先となる電子メールアドレスのリストを取得します。私のレポートテーブルには現在3つのレコードしかありません。レポートテーブルにフィールドを追加しようとしましたが、それは永遠にかかりました。そのため、このクエリがSQLプロセスでハングしていることがわかりました。その日の早い段階で、このスクリプトは次のエラーを生成しました。
Timeout expired. The timeout period elapsed prior to completion
of the operation or the server is not responding.
...これが吊り下げプロセスを説明していると思います。私たちはそれを殺そうとしましたが、今はロールバック状態にあり、SQLサーバーを再起動する必要があるかもしれません(これは、selectクエリがロールバックしようとするのは奇妙です)。これが再び発生するのを防ぐために、SQLサーバーまたは.netのいずれかを使用する方法はありますか?または、SQLでこのプロセスを削除する方法...スレッドプールに何かがぶら下がっている可能性はありますか?レポートテーブルから選択できるので、テーブルロックはありません。このテーブルを変更しようとした場合にのみ、ホイールが回転します。
IISにアクセスできないため、IISの経験はあまりありませんが、提案があればそれを伝えることができます。
編集:これは、catchステートメントで、SqlConnectionが開いているかどうか、および閉じているかどうかを確認しないために発生する可能性がありますか?