2011-01-05 11 views
5

私たちは現在、私たちの手には少しの状況しかありません。誰かがどこかでコードの接続を閉じるのを忘れたようです。その結果、接続プールは比較的早く消耗します。一時的なパッチとして、Webサービスの接続文字列にMax Pool Size = 500;を追加し、すべての接続が完了した時点でプールをリサイクルしてから、これを把握します。 SPIDの15分間使用されていないことを得るためにプール内のすべての接続が使用されています

SELECT SPId 
FROM MASTER..SysProcesses 
WHERE DBId = DB_ID('MyDb') and last_batch < DATEADD(MINUTE, -15, GETDATE()) 

これまでのところ、我々はこれを行っています。

DBCC INPUTBUFFER(61) 

が、表示されたクエリは、接続操作に関する基本レベルで何かが壊れた、または当社の控除が誤ってたのいずれかを意味し、様々です:私たちは、今でそのSPIDを使用して、最後に実行されたクエリを取得しようとしています。 ..

ここに私たちの考えに誤りはありますか? DBCC/sysprocessesは、期待している結果をもたらすのか、それとも副作用があるのでしょうか? (例えば、プールの影響で接続?)

(してください、コードをした男が今、多くの、すべての存在しないので、私たちはSQLを使用して見つけることができるものに固執する)

+3

「コードを実行した人は多く、現在はすべて存在していません」.. SQLコネクションを閉じるのを忘れてしまったときに、それらがすべてそこにあるとは思わない。 ;) –

+0

あなたはソースコードを正しく持っていますか?彼らは意図的に周囲​​の接続を渡していない限り、すべての接続が開いて、それらを閉じることを探すことは困難ではない... –

+1

@will @mitch - あなた* do notは*コードを見て、私を信じたい:)最終的には、それは最終的には唯一の選択肢でした...そして、try-finally {close}をどこにでも置くことによって修正しました... – veljkoz

答えて

2

私がいることを期待します入力バッファによって記憶された数多くの異なるクエリがあります。失敗のタイミングや実行するクエリの種類によっては、このように一貫したクエリが発生する可能性は低いようです。接続は最終的には閉じられるが、GCと確定されたときにのみ終了することを思い出してください。

Mitchが示唆しているように、ソースを検索して接続をオープンし、それらがローカライズされ、using()でラップされていることを確認する必要があります。また、接続を保持している可能性のある長命オブジェクトを探します。カタログの初期のバージョンでは、ASPページオブジェクトは適切に管理されなかった接続を保持していました。

これを絞り込むには、アプリケーションの特定の部分に焦点を当てながら接続数(perfmon)を監視できますか?それはCRUD分野と報告書や他の質問との間でより多く起こるか?それがあなたがする必要があるソースの捜索を絞り込むのに役立つかもしれません。

+0

慌ててコードを通り抜け、どこにでも 'try - finally {conn.Close()}'を置くことで問題を解決しました...アンチパターンコントローラクラスの設計は恐怖です...確かに午前中にスパンキングされます;)ありがとうございます。 – veljkoz

+0

@Mitch:.NETのDB接続の場合、ファイナライザは、管理されていないリソースを解放するdisposeを呼び出します。これは、GCタイミングのため不定期に起こります。 – n8wrl

+0

@veljkoz:あなたはこれを知っているかもしれませんが、try/finallyを効果的に使用するブロックを使って接続をラップすることで、いくつかの型を節約できます。 – n8wrl

1

アプリケーションのフィールドに接続が作成された場所と理由についての情報を含む接続文字列を変更できますか?

+0

あなたはどういう意味が分かりませんか?例を挙げていただけますか? – veljkoz

+1

SQLに表示される128文字までの「アプリケーション名」プロパティを提供することができます。これにより、デバッグ用の不正な接続がはるかに簡単になります(接続が作成されたアプリ内の固有の場所ごとに別の名前を使用します)。 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspxを参照してください。 –

関連する問題