Oracle Universal Connection Pool (UCP) 有多好

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


答案 1

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

  • 不完全支持jdk 6 / ojdbc6.jar。例如,语句缓存和 jmx 支持的使用不适用于 java 6 并引发异常。
  • 没有内部语句高速缓存 - 它依赖于 jdbc 驱动程序的语句高速缓存 (setPoolable())
  • 我将这两个问题提交给了oracle,他们确认了这一点,并且可能会在oracle 12.0发布时修复它。但即便如此,也不确定。
  • 发布太少(3 年内发布 2 个版本),社区支持太少。
  • 非开源
  • 几乎不可扩展。只有少数带有可怕界面设计的回调。
    示例:您希望在连接超过其 TTL 时收到通知?准备包装器数据源和内部/专有 UCP API 的大量使用。官方文档(最后更新:2008)仍然没有说明如何实现这一目标。
  • 胖设计(几乎是一个0,5 MB的jar) - 许多具有相似名称/函数的类(例如,有a和a - 两者都相关但调用方式不同,并提供略有不同的功能。PoolDataSourceConnectionPool
  • java.util.logging


更新1(2014年4月):
虽然有点偏离主题:由于我的评估,我决定使用新的tomcat jdbc-pool - 并且它在几个生产系统中几乎工作了一年。它设计得很好,定期更新,可扩展,apache tomcat团队在回答问题/修复问题方面做得很好

更新2(2016年7月):
我现在强烈推荐HikariCP,我目前更喜欢所有其他连接池。
它的架构,对正确性和性能的关注真是令人惊叹。


答案 2

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

但是,您从 UCP 获得的主要好处是,当您使用 Oracle RAC 和 TAF/FAN 功能时,UCP 与 Dataguard,或者如果您在应用程序服务器之外运行某些内容。


推荐