接続プールで使用可能なすべての接続を使い果たしている Web アプリケーションで問題が発生しています。すべてのアクティブな接続を診断するために使用されたいくつかの優れたツールを思い出すようですが、空白を描いています。この問題を診断するための適切なオプションは何ですか?
4 に答える
アプリケーションで SqlDataReader オブジェクトを使用していますか? SqlDataReader オブジェクトは、閉じられるまで接続を開いたままにします。
SOS を使用した WinDbgの.Net メモリ プロファイラーを使用すると、接続オブジェクトへの参照を保持しているユーザーを追跡できます。その情報を使用して、問題のあるメソッドを追跡できます。
コードレビューに投票します。私はかつてサードパーティによって構築されたアプリで同様の状況にあり、例外が発生したときに接続が確実に閉じられていることを確認するために、接続をすぐに検索したり、最後に使用したりしなかったことが明らかになりました。
また、Michael が指摘したように、データ リーダーが使用する接続が閉じていることを確認する必要があります。リーダーが閉じられたときに接続が閉じられるように指定できます。その場合は、データ リーダーが破棄されていることを確認してください ( using(){} を使用)。
sp_who を実行して SQL サーバーからのアクティブな接続を確認できますが、他の人が示唆しているように、接続を閉じていない可能性があります。ただし、接続を閉じているが、すぐに再開する場合 (テキスト ファイルなどを読み取るループ内など)、接続を閉じていると思っていても、それらをすべて使用できます (接続プーリングを参照)。コードの例を投稿すると、より良い答えが得られると思います。