2009-07-16 26 views
10

私は.NET SqlClient Data Providerを使用してSQL Serverに接続するクライアントサーバーアプリケーションを持っています。デフォルトでは、接続プーリングマネージャがデータベース接続を閉じてプールから削除するまでに、接続がアイドル状態になるまでの時間はどれくらいですか?どのような設定は、これを制御する場合は?SQL Server接続が接続プールによって閉じられる前に、接続がアイドル状態になる必要がありますか。

This MSDN documentのみ

は、それが長い間アイドル状態になった後、またはプーラーは、サーバーとの接続が切断されたことを検出した場合、接続プーラーがプールから接続を削除しますと言います。

答えて

7

数年前の下の答えは状況だったが、あなたはsourceを参照して要約を書くことができますので、今それが変わったの:)


旧答え

This excellent article伝えますコネクションプールの内部動作を明らかにするためにリフレクションを使用して、私たちが知る必要があるもの。

私が理解しているところでは、「閉じた」接続は半ランダムな間隔で定期的にクリーンアップされます。クリーンアッププロセスは、50分おきに2分から3分の間のどこかで実行されますが、「閉じた」接続が正しく閉じる前に2回実行する必要があります。したがって、7分40秒後に '閉鎖'されている場合、基礎となるSQL接続は適切に閉じられていなければなりませんが、2分という短さになる可能性があります。作成時には、プロセスで作成された最初の接続プールは、常に3分10秒のタイマー間隔を持つため、ADOオブジェクトでClose()をコールした後、通常はSQL接続が3分10秒から6分20秒の間で閉じられます。

明らかにこれは文書化されていないコードを使用しているので、将来変更される可能性があります。

+1

ここで注意してください。 [実装](http://referencesource.microsoft.com/#System.Data/System/Data/ProviderBase/DbConnectionInternal.cs,525)が変更され、その記事で公開される内部構造はもう真実ではなくなりました。接続は本当にクリーンアップされます。 – Alexander

0

この通過してください:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring%28VS.80%29.aspx

一部

"次の表は、接続プール値のConnectionString内 の有効な 名が表示されます。"

あなたの興味があるようです。

+0

hmmm ... Load Balance Timeoutが適切な唯一の設定ですが、最大時間ではないため、接続を長くする必要があります。私は「長い間アイドル」がデフォルトで何を意味するのかを知りたい。接続がアイドル状態であると判断する接続プーリングの場合、SQL Server接続のタイムアウトに依存してはいけません。また、SQL Serverの接続タイムアウトなどもありますか? – Rory

+0

Connection Lifetimeを使用して、接続の最大寿命(アイドル時間+使用時間)を決定できます。 –

+0

接続タイムアウトについての部分を削除しました。 利用可能なデータによると、.NETが接続を終了するときにConnection LifetimeとLoad Balanceのタイムアウトを使用すると、接続が切断されるときに制御できると思います。 また、SQl Serverのkeep aliveパラメータは、TCP/IPを使用して、デッド接続(アイドル接続ではない)を殺します。 –

関連する問題