9

異なる ConnectionPool 実装のパフォーマンス特性を比較する情報を誰かが持っていますか?

バックグラウンド: 同じボックスの mysql インスタンスに対してバックグラウンド スレッドで db 更新を実行するアプリケーションがあります。データソース com.mchange.v2.c3p0.ComboPooledDataSource を使用すると、時折 SocketExceptions: com.mysql.jdbc.CommunicationsException: 基礎となる例外による通信リンク障害が発生します:

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: Broken pipe

STACKTRACE:

java.net.SocketException: Broken pipe
        at java.net.SocketOutputStream.socketWrite0(Native Method)

mysql 接続タイムアウトを増やすと、これらのエラーの頻度が増加しました。

これらのエラーは、別の接続プール (com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource) に切り替えると消えました。ただし、パフォーマンスは低下する可能性があり、メモリ プロファイルは著しく低下します (c3p0 プールよりも GC が少なく、はるかに大きくなります)。

4

5 に答える 5

5

使用する接続プールが何であれ、接続がいつでもランダムに閉じられる可能性があると想定し、アプリケーションでそれを処理させる必要があります。

「信頼された」ネットワーク上で長期にわたる DB 接続の場合、OS が接続を開くことができる時間制限を適用したり、「接続クリーンアップ」コードを定期的に実行したりすることがよくあります。しかし、原因はそれほど重要ではありません。接続が「足元から引っ張られる」可能性があると想定し、それに応じてこのシナリオに対処する必要があるのは、ネットワーク ライフの一部です。

そのため、このケースをプログラムで処理できない接続プールフレームワークのポイントが本当にわかりません。

(ちなみに、これは、独自の接続プール コードを作成するだけでよかったという私のケースの 1 つです。不思議なことにメモリを消費するブラック ボックスはなく、"魔法のパラメータ" を見つけるためにあちこち探し回る必要もありません...)

于 2009-05-07T17:19:18.940 に答える
3

http://jolbox.com(C3P0とDBCPの両方よりも高速な接続プールであるBoneCPをホストしているサイト)でいくつかのベンチマーク数を確認することをお勧めします。

于 2009-11-14T11:56:22.493 に答える
1

mysqlとc3p0でもこのエラーがポップアップしました-さまざまなことを試したところ、最終的には消えました。思い出せませんが、それを解決したのは autoReconnect フラグのようなものでした

url="jdbc:mysql://localhost:3306/database?autoReconnect=true"
于 2009-05-07T16:19:36.230 に答える
1

Apache DBCPを試しましたか? c3po については知りませんが、DBCP はさまざまな方法でアイドル状態の接続を処理できます。

  • プールからアイドル状態の接続を削除できます
  • 一定期間非アクティブになった後、アイドル状態の接続に対してクエリを実行できます

また、クエリを実行することにより、接続がアプリケーションに渡される直前に有効かどうかをテストすることもできます。例外が発生した場合は、その接続を破棄し、別の接続を試みます (可能であれば新しい接続を作成します)。はるかに堅牢です。

于 2009-05-07T17:16:48.527 に答える