web-dev-qa-db-ja.com

接続タイムアウトと接続寿命

接続タイムアウト= 0の長所と短所は何ですか?

そして、Connection Lifetime = 0の用途は何ですか?

例えば

(Database=TestDB;
 port=3306;
 Uid=usernameID;
 Pwd=myPassword;
 Server=192.168.10.1;
 Pooling=false;
 Connection Lifetime=0;
 Connection Timeout=0)

そして接続プーリングの使用は何ですか?

18
Mark

タイムアウトは、あきらめる前にリクエストからの応答を待つ時間です。 TimeOut = 0は、接続が永久に発生するまで待機し続けることを意味します。非常に遅いサーバーに接続している場合、応答に12時間かかるのは正常であると思います:-)。一般的に悪いこと。リクエストになんらかの適切なタイムアウトを設定して、ターゲットがダウンしていることに気づき、生活を続けることができます。

Connection Lifetime =接続が強制終了されて再作成されるまでの時間。ライフタイムが0の場合は、強制終了して再作成しないことを意味します。接続の強制終了と再作成には時間がかかるため、通常は問題ありません。さまざまなバグにより、接続が不安定な状態でスタックする可能性があります(奇妙な3ウェイトランザクションを処理するときなど)。

接続プーリングは、接続の作成が非常に遅いという事実に対処する方法です。そのため、すべての要求に対して新しい接続を作成するのではなく、代わりに、たとえば10のプールを作成しておいてください。 1つが必要な場合は、1つを借りて使用し、戻ってきます。プールのサイズを調整して、アプリの動作を変更できます。より大きなプール=より多​​くの接続=一度に何かを実行するより多くのスレッドですが、これはまた、あなたがしていることをすべて圧倒する可能性があります。

要約すれば:
ConnectionTimeout =は不正解です。30秒程度の値にしてください。
ConnectionLifetime =は問題ありません
ConnectionPooling = disabledは良くないので、使用したいと思うでしょう。

30
bwawok

これは古いスレッドであることはわかっていますが、接続プーリングを無効にしたり、接続ライフタイムを使用したりする必要があるインスタンスを指摘することが重要だと思います。

一部の環境では(特にOracleを使用している場合、または少なくとも私の経験では)、Webアプリケーションは、ユーザーの資格情報とサーバーの構成ファイルにある固定接続文字列を使用してデータベースに接続するように設計されています。この場合、接続プールを有効にすると、サーバーはWebサイトにアクセスするユーザーごとに接続プールを作成します( プールの断片化 を参照)。シナリオに応じて、これは良い場合も悪い場合もあります。

ただし、接続プーリングは問題になりますデータベースサーバーが、最大アイドル時間を超えるデータベース接続を強制終了するように構成されているため、データベースサーバーが接続プールにまだ存在している可能性がある接続を強制終了します。このシナリオでは、Connection Lifetimeがサーバーによって閉じられているため、これらの接続を破棄するのに役立ちます。

9
Ulises