Java Oracle通用连接池(UCP)的性能如何

Java Oracle通用连接池(UCP)的性能如何,java,jdbc,connection-pooling,c3p0,apache-commons-dbcp,Java,Jdbc,Connection Pooling,C3p0,Apache Commons Dbcp,有人有在实际生产负载下使用Oracle UCP的经验吗? 它能很好地处理数据库重新连接吗? 是否存在多线程问题? 有人将它与C3P0或Apache DBCP进行过比较吗?通过使用oracle的连接池(IBM RAD),我得到了更快的结果。与正常编程概念相比,在连接池属性中,默认情况下,最大连接数为10,理想的超时时间为180秒 在这里,我们可以设置一次访问的最大用户数……我看到多个客户在生产中使用UCP。我没有看到你关心的任何问题。它在负载下性能相当好。并且可以处理重新连接。重新连接策略是可配置

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

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


在这里,我们可以设置一次访问的最大用户数……

我看到多个客户在生产中使用UCP。我没有看到你关心的任何问题。它在负载下性能相当好。并且可以处理重新连接。重新连接策略是可配置的。它还很好地支持RAC


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

我在一个系统中使用过UCP,平均每秒10个事务,峰值每秒360个事务,目前还没有问题。(数量为每台应用服务器8台)


但是,UCP的主要好处是当您使用Oracle RAC和时,或者如果您在appserver之外运行某些东西时

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

  • 它不完全支持jdk 6。例如,语句缓存和jmx支持的使用不适用于java 6,并引发异常
  • 没有内部语句缓存-它依赖于jdbc驱动程序的语句缓存(
    setPoolable()
  • 我向oracle提交了这两个问题,他们确认了这一点,并且可能会在oracle 12.0发布时修复。但即使这样也不能确定
  • 发布太少(3年发布2次),社区支持太少
  • 非开源
  • 几乎不可扩展。只有少数回调具有糟糕的界面设计。
    示例:当连接超过其TTL时,是否希望收到通知?为包装器数据源和内部/专有UCP API的大量使用做好准备。官方文件(最新更新:2008)对如何实现这一目标保持沉默
  • Fat设计(几乎是一个0,5 MB的jar)-许多具有类似名称/功能的类(例如,有一个
    PoolDataSource
    和一个
    ConnectionPool
    -两者都是相关的,但调用方式不同,提供的功能略有不同。)
  • java.util.logging仅限

更新1(2014年4月)
虽然有点离题:作为我评估的结果,我决定使用新的——而且它在一些生产系统中工作了一年,几乎完美无瑕。它设计得非常好,定期更新,可扩展,ApacheTomcat团队做了大量工作。

更新2(2016年7月)

我现在可以强烈推荐我目前最喜欢的连接池
它的体系结构、对正确性和性能的关注令人惊讶。

我在这里描述了我观察到的UCP与隐式连接缓存相比的性能/可伸缩性问题:

我刚刚用基于Eclipse链接的应用程序尝试了UCP,我遇到了ORA-0100:每次都超过了最大打开游标数。我已经将参数MaxStatements设置为10,但没有效果。我检查了堆,发现有数百个T4CPreparedStatement对象处于活动状态,但只有不到10个包装语句。因此,在某个地方有一个巨大的语句缓存,我无法控制


Tomcat jdbc池工作起来很有魅力。

我很难相信Oracle的软件无法处理重载,并且会出现问题。如果是这样,他们只需购买完成工作所需的东西。他们承受不起它带来的负面新闻以及恶意内容的客户。请您发布与Oracle有关的问题的链接,好吗?我们也遇到了同样的问题。我们使用旧的oracle池的应用程序运行良好,但当我们切换到UCP时,我们得到了ORA-0100。你解决问题了吗?我放弃了UCP。我正在使用Tomcat jdbc连接池。