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

时间:2010-03-11 08:29:17

标签: java jdbc connection-pooling c3p0 apache-commons-dbcp

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

6 个答案:

答案 0 :(得分:32)

我评估了UCP 11.2.0.1 作为旧版连接池的替代,我不推荐

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


更新1(2014年4月)
虽然略显偏离主题:由于我的评价,我决定采用新的tomcat jdbc-pool - 并且它在几个生产系统中的一年后几乎完美地工作。它设计得很好,定期更新,可扩展,并且apache tomcat团队做了good job in responding to questions/fixing issues

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

答案 1 :(得分:3)

我在一个系统中使用了UCP,每秒约10次交易(平均值),每秒达到360次交易,没有问题。 (每个应用服务器的数量为8台服务器)

但是,从UCP获得的主要好处是当您使用Oracle RAC和TAF/FAN functionality, UCP with Dataguard时,或者如果您在外部运行某个应用程序服务器。

答案 2 :(得分:3)

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

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

Tomcat jdbc pool就像魅力一样。

答案 5 :(得分:-5)

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

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