Skip to Main Content

APEX

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

How to solve : All connections in the Universal Connection Pool are in use ?

YounApr 12 2022

Hello experts,
We have Apex 20 configured with ORDS behind Apache Tomcat.
ORDS is configured as follows :

<entry key="jdbc.DriverType">thin</entry>
<entry key="jdbc.InactivityTimeout">3000</entry>
<entry key="jdbc.InitialLimit">40</entry>
<entry key="jdbc.MaxConnectionReuseCount">10000</entry>
<entry key="jdbc.MaxLimit">40</entry>
<entry key="jdbc.MaxStatementsLimit">100000</entry>
<entry key="jdbc.MinLimit">40</entry>
<entry key="jdbc.statementTimeout">900</entry>

We perform some stress tests on our application. And as of a certain number of concurrent users, we start getting the error :

Caused by: oracle.dbtools.common.jdbc.ConnectionPoolConfigurationException: ORDS was unable to make a connection to the database.  This can occur if the database is unavailable, the maximum number of sessions has been reached or the pool is not correctly configured. The connection pool named: |apex|pu| had the following error(s): Exception occurred while getting connection: oracle.ucp.UniversalConnectionPoolException: All connections in the Universal Connection Pool are in use - [ 40, 40, 40, 0, 0, 40, 10, 0, 39 ] 
	at oracle.dbtools.common.jdbc.ConnectionPoolExceptions.from(ConnectionPoolExceptions.java:47)
	at oracle.dbtools.common.jdbc.DataSourceConnection.getPooledConnection(DataSourceConnection.java:220)
	at oracle.dbtools.common.jdbc.DataSourceConnection.getPooledConnection(DataSourceConnection.java:186)
	at oracle.dbtools.common.jdbc.DataSourceConnection.getDefaultConnection(DataSourceConnection.java:144)
	at oracle.dbtools.common.jdbc.DataSourceConnection.getConnection(DataSourceConnection.java:58)
	at oracle.dbtools.common.pools.DataSourceTargetImpl.getConnection(DataSourceTargetImpl.java:57)
	at oracle.dbtools.common.config.db.SchemaConnectionFactoryBase.inject(SchemaConnectionFactoryBase.java:69)
	at oracle.dbtools.url.mapping.db.PoolInjector.inject(PoolInjector.java:58)
	... 67 more
Caused by: java.sql.SQLException: Exception occurred while getting connection: oracle.ucp.UniversalConnectionPoolException: All connections in the Universal Connection Pool are in use - [ 40, 40, 40, 0, 0, 40, 10, 0, 39 ]
	at oracle.ucp.util.UCPErrorHandler.newSQLException(UCPErrorHandler.java:489)
	at oracle.ucp.util.UCPErrorHandler.throwSQLException(UCPErrorHandler.java:166)
	at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:1863)
	at oracle.ucp.jdbc.PoolDataSourceImpl.access$300(PoolDataSourceImpl.java:220)
	at oracle.ucp.jdbc.PoolDataSourceImpl$3.build(PoolDataSourceImpl.java:3980)
	at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:1786)
	at oracle.dbtools.common.ucp.PoolDataSourceDelegate.getConnection(PoolDataSourceDelegate.java:107)
	at oracle.dbtools.common.config.db.RefreshablePoolDataSource.getConnection(RefreshablePoolDataSource.java:109)
	at oracle.dbtools.common.ucp.PoolDataSourceDelegate.getConnection(PoolDataSourceDelegate.java:107)
	at oracle.dbtools.common.ucp.PoolDataSourceDelegate.getConnection(PoolDataSourceDelegate.java:94)
	at oracle.dbtools.common.jdbc.DataSourceConnection.getPooledConnection(DataSourceConnection.java:210)
	... 73 more
Caused by: oracle.ucp.UniversalConnectionPoolException: All connections in the Universal Connection Pool are in use - [ 40, 40, 40, 0, 0, 40, 10, 0, 39 ]
	at oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException(UCPErrorHandler.java:369)
	at oracle.ucp.util.UCPErrorHandler.throwUniversalConnectionPoolException(UCPErrorHandler.java:59)
	at oracle.ucp.util.UCPErrorHandler.throwUniversalConnectionPoolException(UCPErrorHandler.java:99)
	at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionWithoutCountingRequests(UniversalConnectionPoolImpl.java:381)
	at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionAndValidateHelper(UniversalConnectionPoolImpl.java:199)
	at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionAndValidate(UniversalConnectionPoolImpl.java:156)
	at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnection(UniversalConnectionPoolImpl.java:129)
	at oracle.ucp.jdbc.JDBCConnectionPool.borrowConnection(JDBCConnectionPool.java:175)
	at oracle.ucp.jdbc.oracle.OracleJDBCConnectionPool.borrowConnection(OracleJDBCConnectionPool.java:601)
	at oracle.ucp.jdbc.oracle.OracleConnectionConnectionPool.borrowConnection(OracleConnectionConnectionPool.java:109)
	at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:1843)
	... 81 more

I would like to know please whether it's possible to configure ORDS or Tomcat such that once all connections in the Universal Connection Pool are in use, not to send the response Not Found. But wait until a connection is available to perform the required action. Even if the request will take a long time.
Is that possible please ?
Thanks.

Comments
Post Details
Added on Apr 12 2022
1 comment
1,880 views