0

データベース管理者ではないので( MSデータベース管理者ではありません:)、私が書いたコードの一部がデータベースに「スリープ状態の接続」を残しているという苦情を受けました。

私のコードはJavaで、接続プールにApacheCommonsDBCPを使用しています。また、Springを使用JdbcTemplateして接続の状態を管理しているので、接続を閉じないことは問題外です(ライブラリが私のためにそれを行っているため)。

私の主な質問は、DBAの観点から、これらの接続が停止またはパフォーマンスの低下を引き起こす可能性があるかどうかです。

この質問は関連しています。現在、設定はそのままです(プール内のアクティブ/アイドル接続は無限です)。

4

2 に答える 2

1

Apache DBCPのmaxIdle接続設定は8で、maxActive設定は8です。これは、8つのアクティブな接続と8つのアイドルな接続がプールに存在できることを意味します。DBCPは、接続の呼び出しが行われたときに接続を再利用します。要件に応じて設定できます。以下のドキュメントを参照できます。

DBCP構成-Apache

于 2011-05-06T09:40:59.813 に答える
1

本当に、あなたの質問に答えるには、これらの「眠っている」接続の数のアイデアが良いでしょう. また、このサーバーの主な目的がアプリケーションにサービスを提供することなのか、それともアプリケーションが多くのアプリケーションの 1 つなのかどうかも重要です。また、アプリの複数のインスタンス (複数の Web サーバー上など) があるかどうか、またはそれが 1 つだけであるかどうかも関連します。

私の経験では、数百に達しない限り、最新のハードウェアのアイドル接続に関連するオーバーヘッドはほとんどまたはまったくありません。そうは言っても、あなたの前の質問を見ると、プールが無制限の数の接続を生成できるようにすることは賢明ではありません.数百に設定したとしても、上限を設定することをお勧めします.

接続プールのリークに関する少なくとも 1 つのつらい状況から、1 つの SQL サーバーに対して 1000 の接続を開いていると、それらがアイドル状態であってもコストがかかることがわかります。2,000接続の範囲に近づくと、サーバーがそれを失い始めたことを思い出したようです(新しい接続の受け入れの失敗、単純なクエリのタイムアウトなど)(これは数年前のミッドレンジハードウェア上のSQL 2000でした)。

お役に立てれば!

于 2011-05-06T15:01:47.830 に答える