Oracle通用连接池(UCP)有多好

有没有人有在实际生产负载下使用Oracle UCP的经验? 它是否能很好地处理数据库重新连接? 有任何multithreading问题吗? 有没有人将它与C3P0或Apache DBCP进行比较?

我评估了UCP 11.2.0.1作为我们传统连接池的替代品,我不推荐它

  • 不完全支持jdk 6 / ojdbc6.jar。 例如,使用语句缓存和jmx-support不能与java 6一起使用并抛出exception。
  • 没有内部语句缓存 – 它依赖于jdbc驱动程序的语句缓存( setPoolable()
  • 我向oracle提交了这两个问题,他们确认了这个问题,并且可能会在oracle 12.0发布时修复它。 但即使这样也不确定。
  • 发布的数量太少 (3年内发布 2次),社区支持太少。
  • 不是开源的
  • 几乎无法扩展。 只有少数回调具有可怕的界面设计。
    示例:您希望在Connection超过其TTL时收到通知? 准备包装器DataSource以及内部/专有UCP API的大量使用。 官方文档(最新更新:2008)仍然保持沉默,如何实现这一目标。
  • 胖设计 (几乎是一个0.5 MB的jar) – 许多具有类似名称/function的类(例如,有一个PoolDataSource和一个ConnectionPool – 两者都是相关的,但调用方式不同,并提供稍微不同的function。)
  • 仅限java.util.logging

更新1(2014年4月)
虽然略显偏离主题:作为我评估的结果,我决定使用新的tomcat jdbc-pool – 并且它在几个生产系统中一年以来几乎完美地工作。 它设计精良,定期更新,可扩展,并且apache tomcat团队在回答问题/修复问题方面做得很好 。

更新2(2016年7月)
我现在强烈推荐HikariCP ,我目前支持所有其他连接池。
它的架构,注重正确性和性能真是太棒了。

我已经在一个系统中使用UCP,每秒约10次事务(平均值)和每秒360次事务处理峰值,并且还没有问题。 (每个应用服务器的数量为8台服务器)

但是,从UCP获得的主要好处是,当您使用Oracle RAC和TAF / FANfunction时,UCP与Dataguard一起使用,或者如果您 appserver 之外运行某些东西。

我已经描述了我在UCP中观察到的与隐式连接缓存相比的性能/可伸缩性问题: https : //stackoverflow.com/a/27512252/676877

我见过很多客户在生产中使用UCP。 我没有看到你关心的问题。 它在负载下表现很好。 并且可以处理重新连接。 重新连接策略是可配置的。 它也很好地支持RAC。

但使用商业连接池的真正好处是,有人对您遇到的任何问题负责。 你会惊讶于有多少人试图开发和维护自己的连接池。

我刚刚使用基于Eclipse Link的应用程序尝试了UCP,并且遇到了ORA-0100:每次都超出了最大打开游标数。 我已将参数MaxStatements设置为10,但这没有任何效果。 我已经检查了堆,并且有数百个T4CPreparedStatement对象存活但少于10个包装语句。 所以在我无法控制的地方有一个巨大的语句缓存。

Tomcat jdbc池就像一个魅力。

通过使用连接池(IBM RAD)到oracle,我得到了更快的结果。与正常编程概念相比,在连接池属性中,默认情况下,最大连接数为10,理想超时为180秒。

在这里我们可以设置最大用户用户访问权限….