実際の本番環境で Oracle UCP を使用した経験のある人はいますか? データベースの再接続を適切に処理しますか? マルチスレッドの問題はありますか? C3P0 や Apache DBCP と比較した人はいますか?
6 に答える
従来の接続プールの代替としてUCP 11.2.0.1 を評価しましたが、お勧めできません。
- jdk 6 / ojdbc6.jarを完全にはサポートしていません。たとえば、ステートメント キャッシングと jmx-support の使用は Java 6 では機能せず、例外がスローされます。
- 内部ステートメント キャッシュなし- jdbc ドライバーのステートメント キャッシュに依存します (
setPoolable()
) - 私は両方の問題をオラクルに提出しました。オラクルはそれを確認し、オラクル 12.0 がリリースされるときにおそらく修正されるでしょう。しかし、それでも確実ではありません。
- リリースが少なすぎる (3 年間で 2 つのリリース)、コミュニティ サポートが少なすぎる。
- オープンソースではない
- 拡張しにくい。ひどいインターフェース設計のコールバックはわずかです。
例: 接続が TTL を超えたときに通知を受け取りたいですか? ラッパー DataSource と、内部/独自の UCP API の大量使用を準備します。公式ドキュメント (最終更新: 2008) は、これを達成する方法について沈黙を守っています。 - ファットなデザイン(ほぼ 0.5 MB の jar) - 似たような名前/機能を持つ多くのクラス (たとえば、a
PoolDataSource
と aConnectionPool
があります。どちらも関連していますが、呼び出し方が異なり、わずかに異なる機能を提供します。) - java.util.loggingのみ
更新 1 (2014 年 4 月) :
少し話題から外れていますが: 私の評価の結果、新しいtomcat jdbc-poolを使用することにしました。非常によく設計されており、定期的に更新され、拡張可能であり、Apache Tomcat チームは質問への対応や問題の修正において優れた仕事をしています。
更新 2 (2016 年 7 月) :現在、他のすべての接続プールよりも優先しているHikariCP
を
強くお勧めできるようにそのアーキテクチャ、正確性とパフォーマンスに重点を置いていることは、驚くべきことです。
1 秒あたり約 10 トランザクション (平均) と 1 秒あたり 360 トランザクションのシステムで UCP を使用しましたが、まだ問題はありません。(数は 8 サーバーのアプリ サーバーごとです)
ただし、UCP から得られる主な利点は、Oracle RAC とTAF/FAN 機能、UCP と Dataguard を使用している場合、またはアプリケーションサーバーの外部で何かを実行している場合です。
ここで、暗黙的な接続キャッシュと比較して、UCP で観察したパフォーマンス/スケーラビリティの問題について説明しました: https://stackoverflow.com/a/27512252/676877
UCP を本番環境で使用している顧客を複数見てきました。あなたが心配している問題は見たことがありません。負荷がかかった状態でのパフォーマンスは非常に良好です。また、再接続を処理できます。再接続ポリシーは構成可能です。また、RAC も十分にサポートしています。
しかし、商用の接続プールを使用することの本当の利点は、誰かが問題の責任を負うことです。独自の接続プールを開発および維持しようとする人の多さに驚かれることでしょう。
接続プール (IBM RAD) をオラクルに使用することで、通常のプログラミング概念と比較してより高速な結果が得られます。接続プールのプロパティでは、デフォルトで接続の最大数は 10 であり、理想的なタイムアウトは 180 秒です。 .
ここで、一度にアクセスできるユーザーの最大数を設定できます....