web-dev-qa-db-ja.com

Oracle Universal Connection Pool(UCP)はどの程度優れているか

実際の本番負荷でOracle UCPを使用した経験はありますか?データベースの再接続をうまく処理しますか?マルチスレッドの問題はありますか? C3P0やApache DBCPと比較した人はいますか?

28

私はUCP 11.2.0.1を評価しました従来の接続プールの代替としてそして私はそれを推奨できません

  • それjdk 6を完全にはサポートしていません/ojdbc6.jar。たとえば、ステートメントキャッシングとjmx-supportの使用は、Java 6では機能せず、例外をスローします。
  • 内部ステートメントキャッシュなし-jdbcドライバーのステートメントキャッシュに依存します(setPoolable()
  • 私は両方の問題をOracleに提出しました。彼らはそれを確認し、おそらくOracle 12.0がリリースされるときに修正するでしょう。しかし、それは確かではありません。
  • リリースが少なすぎます(3年間で2リリース)、コミュニティサポートが少なすぎます。
  • オープンソースではありません
  • ほとんど拡張できません。恐ろしいインターフェース設計のコールバックはほんのわずかです。
    例:接続がTTLを超えたときに通知を受け取りたいですか?ラッパーDataSourceおよび内部/独自のUCP APIの大量使用の準備をします。公式ドキュメント(最終更新:2008)は、これを実現する方法については黙っています。
  • Fat design(ほぼ0,5 MB jar)-名前/機能が類似している多くのクラス(たとえば、PoolDataSourceConnectionPoolがあります-両方とも関連していますが、呼び出されます)別に、わずかに異なる機能を提供します。)
  • Java.util.loggingのみ


UPDATE 1(2014年4月)
少しトピックから外れていますが、私の評価の結果、新しい Tomcat jdbc-pool -を使用することにしました。これは、1年以来、いくつかの運用システムでほぼ完全に機能しています。それは非常によく設計されており、定期的に更新され、拡張可能であり、Apache Tomcatチームは 質問への対応/問題の修正に優れています を行います。

UPDATE 2(2016年7月)
これで強く推奨できます HikariCP 現在、他のすべての接続プールよりも推奨しています。
そのアーキテクチャ、正確さとパフォーマンスに焦点を当てたものは、驚くべきものです。

33
MRalwasser

1秒あたり約10トランザクション(平均)と1秒あたり360トランザクションのピークがあるシステムでUCPを使用しましたが、まだ問題はありません。 (数は8台のサーバーを備えたアプリサーバーごと)

ただし、UCPから得られる主な利点は、Oracle RACと TAF/FAN機能、Dataguardを備えたUCP を使用している場合、またはoutsideアプリサーバー。

4
oluies

ここでは、暗黙的な接続キャッシュと比較してUCPで観察したパフォーマンス/スケーラビリティの問題について説明しました https://stackoverflow.com/a/27512252/676877

3
Brett Okken

私はEclipse LinkベースのアプリケーションでUCPを試したところ、ORA-0100が発生しました:常に最大オープンカーソル数を超えました。パラメーターMaxStatementsを10に設定しましたが、効果がありませんでした。私はヒープを検査しましたが、何百ものT4CPreparedStatementオブジェクトが生きていますが、ラップされたステートメントは10未満でした。したがって、私が制御できないどこかに巨大なステートメントキャッシュがあります。

Tomcat jdbcプールは魅力のように機能します。

2
TomWolk

UCPを本番環境で使用している複数の顧客を見てきました。私はあなたが心配している問題を見たことがありません。負荷がかかっても非常によく機能します。そして、再接続を処理できます。再接続ポリシーは構成可能です。また、RACもサポートしています。

しかし、商用接続プールを使用する本当の利点は、あなたが抱えている問題に対して誰かが責任を負うことです。多くの人が自分の接続プールを開発して維持しようとすることに驚くでしょう。

2
bconneen