Соединения из пула соединений UCP теряют связь Случайно, когда некоторые работают нормально
Я столкнулся с проблемой подключения к БД в одной из моих сред. Вот мой спящий спящий для пула
<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.use_query_cache">true</property>
<property name="hibernate.cache.provider_class">com.service.app.dao.util.EhCacheProvider</property>
<property name="net.sf.ehcache.configurationResourceName">ehcache.xml</property>
<property name="hibernate.generate_statistics">false</property>
<property name="current_session_context_class">thread</property>
<property name="connection.provider_class">com.security.datasource.oracle.MyOracleDataSource</property>
<property name="datasource.connections.min_size">5</property>
<property name="datasource.connections.max_size">500</property>
<property name="datasource.connections.idle_test_period">100</property>
<property name="datasource.connections.testConnectionOnCheckout">true</property>
<property name="datasource.connections.checkoutTimeout">60000</property>
<property name="datasource.connections.timeout">300</property>
<property name="datasource.connections.preferredTestQuery">SELECT 1 from dual</property>
<property name="datasource.max_statements">200</property>
<property name="datasource.connections.wait.timeout">3</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.format_sql">false</property>
<property name="hibernate.connection.useUnicode">true</property>
<property name="hibernate.connection.characterEncoding">UTF-8</property>
Этот конф и код работает с прошлой пары лет. Внезапно мы столкнулись со следующим исключением
[2017-11-27 06:44:43.712 GMT] WARN [] [] [] [] [] [] [] [] [] http-bio-8280-exec-53 org.hibernate.util.JDBCExceptionReporter - SQL Error: 31, SQLState: null
[2017-11-27 06:44:43.712 GMT] ERROR [] [] [] [] [] [] [] [] [] http-bio-8280-exec-53 org.hibernate.util.JDBCExceptionReporter - The connection is closed: The connection is closed
[2017-11-27 06:44:43.712 GMT] ERROR [] [] [] [] [] [] [] [] [] http-bio-8280-exec-53 com.service.web.services.resource.UserResource - Error ocurred; Representation ->org.restlet.resource.InputRepresentation@4ad69c09
com.management.tenant.exception.OperationFailedException: org.hibernate.exception.GenericJDBCException: could not execute query
at com.service.app.dao.impl.TenantManagementSystem.getUserByEmailAddress(TenantManagementSystem.java:331)
at com.service.web.services.resource.BaseResource.getUser(BaseResource.java:415)
at com.service.web.services.resource.UserResource.handleGetPreference(UserResource.java:1223)
at com.service.web.services.resource.UserResource.acceptRepresentation(UserResource.java:167)
at org.restlet.resource.Resource.post(Resource.java:683)
at org.restlet.resource.Resource.handlePost(Resource.java:537)
at org.restlet.Finder.handle(Finder.java:357)
at org.restlet.Filter.doHandle(Filter.java:150)
at org.restlet.Filter.handle(Filter.java:195)
at org.restlet.Router.handle(Router.java:504)
at org.restlet.Filter.doHandle(Filter.java:150)
Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2216)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:811)
at com.service.app.dao.impl.UserUtil.isUserAuthorized(UserUtil.java:157)
at com.service.app.dao.impl.TenantManagementSystem.getUserByEmailAddress(TenantManagementSystem.java:327)
... 58 more
Caused by: java.sql.SQLException: The connection is closed: The connection is closed
at oracle.ucp.util.UCPErrorHandler.newSQLException(UCPErrorHandler.java:473)
at oracle.ucp.util.UCPErrorHandler.newSQLException(UCPErrorHandler.java:457)
at oracle.ucp.jdbc.proxy.JDBCConnectionProxyFactory.invoke(JDBCConnectionProxyFactory.java:286)
at com.sun.proxy.$Proxy9.prepareStatement(Unknown Source)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:423)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
at org.hibernate.loader.Loader.doQuery(Loader.java:673)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2213)
Кроме того, есть некоторые вызовы БД из приложения.
Означает, что некоторые соединения из пула соединений UCP были закрыты и находились в спящем режиме при попытке их использования. Есть ли сценарий, когда некоторые соединения из пула соединений были закрыты? На БД или на сервере приложений нет никакой нагрузки. Также используются соединения всего 8-10. Мы используем Hibernate 3 и UCP 11.2.0.3.0 версии. Оракул 12RAC. Также мы добавили App Dynamics на серверы приложений и базы данных. Пожалуйста, поделитесь любой точкой, которая может внезапно вызвать такую проблему.