OracleDataSource vs. Oracle UCP PoolDataSource

后端 未结 8 1845
无人共我
无人共我 2020-12-02 10:24

I was researching some JDBC Oracle Connection Pooling items and came across a new(er) Oracle Pool implementation called Universal Connection Pool (UCP). Now this uses a new

相关标签:
8条回答
  • 2020-12-02 10:42

    The implicit connection caching performs quite a bit better than UCP if you use the connection validation. This corresponds to bug 16723836, which is scheduled to be fixed in 12.1.0.2.

    UCP pooling becomes increasingly more expensive to get/return connections as the concurrent load increases. The test compares the oracle implicit connection caching, tomcat's pooling, and UCP. All 3 are configured to allow a max of 200 connections, a minimum of 20 connections and an initial size of 2. All 3 are configured to validate the connections as they are removed from the pool. The tomcat pool uses the statement "select sysdate from dual" for validation.

    These results on a 64bit RedHat node with 64 logical cores (32 physical) and 128 GB of ram.

    At 5 concurrent threads, UCP is the slowest, but total connection management time (get and close) is under 1 ms on average. As the concurrency is increased, UCP falls further and further behind the other solutions:

    25 Threads:
    Implicit: 0.58ms
    Tomcat: 0.92ms
    UCP: 1.50ms
    
    50 Threads:
    Implicit: 0.92ms
    Tomcat: 1.60ms
    UCP: 6.80ms
    
    100 Threads:
    Implicit: 2.60ms
    Tomcat: 3.20ms
    UCP: 21.40ms
    
    180 Threads:
    Implicit: 13.86ms
    Tomcat: 15.34ms
    UCP: 40.70ms
    
    0 讨论(0)
  • 2020-12-02 10:51

    Latest Oracle jdbc driver (11.2.0.1.0) explicit states that Oracle Implicit Connection cache (which is that one that use OracleDataSource) it's deprecated :

    Oracle JDBC Drivers release 11.2.0.1.0 production Readme.txt

    What Is New In This Release ?

    Universal Connection Pool In this release the Oracle Implicit Connection Cache feature is deprecated. Users are strongly encouraged to use the new Universal Connection Pool instead. The UCP has all of the features of the ICC, plus much more. The UCP is available in a separate jar file, ucp.jar.

    So I think it's better to start using UCP, but the documentation it's not that good. For example I didn't find a way to use UCP with spring...

    UPDATE: I've found the correct spring configuration: OK I think I've found the right configuration:

    <bean id="dataSource" class="oracle.ucp.jdbc.PoolDataSourceFactory" factory-method="getPoolDataSource">
        <property name="URL" value="jdbc:oracle:thin:@myserver:1521:mysid" />
        <property name="user" value="myuser" />
        <property name="password" value="mypassword" />
        <property name="connectionFactoryClassName" value="oracle.jdbc.pool.OracleDataSource" />
        <property name="connectionPoolName" value="ANAG_POOL" />
        <property name="minPoolSize" value="5" />
        <property name="maxPoolSize" value="10" />
        <property name="initialPoolSize" value="5" />
        <property name="inactiveConnectionTimeout" value="120" />
        <property name="validateConnectionOnBorrow" value="true" />
        <property name="maxStatements" value="10" />
    </bean>
    

    The key is to specify the right factory class and the right factory method

    0 讨论(0)
提交回复
热议问题