У нас есть OracleXADataSource, который обернут Apache Aries в Fuse Fabric (как в this article). Если я продолжаю посылать много запроса на сервер, он начинает бросать следующее сообщение об ошибке:Предохранитель, распределенный менеджер tx, не выпускает сеансы DB
Caused by: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
Когда я проверяю сессии, используя следующий запрос, после каждого запроса в Oracle, он продолжает показывать увеличенное число под текущее использование.
select resource_name, current_utilization, max_utilization, limit_value
from v$resource_limit
where resource_name in ('sessions', 'processes', 'transactions');
CURRENT_UTILIZATION MAX_UTILIZATION LIMIT_VALUE processes 545 768 800 sessions 553 774 1222 transactions 0 0 UNLIMITED
Большинство рекомендаций по этому вопросу говорит увеличить процессы и сессии пределы в Oracle, но это позволило бы решить проблему временно, пока мы не достигнем определенной нагрузки I» м страшно.
Я нашел/попробовал следующее до сих пор:
- Perodically при увеличении нагрузки (или определенное количество времени, потраченного) сессию и процессах прибудут пониженную с большим количеством (100-200). (Думаю, Геронимо периодически выпускает сеансы). В то же время, когда число сеансов высвобождаются, активная колонка транзакций показывает ту же сумму:
CURRENT_UTILIZATION MAX_UTILIZATION LIMIT_VALUE processes 355 768 800 sessions 363 774 1222 transactions 122 122 UNLIMITED
- Если я выключаю предохранитель, на процессах значение возвращается к исходному размеру немедленно (так что вопрос находится на стороне клиента)
- Если отключить распределенную поддержку транзакций, то все в порядке и процессов не увеличивается при всех
Я попытался добавить пул к OracleXADataSource, но ничего не изменилось (оно устарело, но я предполагаю, что оно все еще работает. Мы не имеем UCP баночку, к сожалению, так что я не мог проверить ее с)
<property name="connectionCachingEnabled" value="true"/> <property name="connectionCacheProperties"> <props merge="default"> <prop key="InitialLimit">1</prop> <prop key="MinLimit">1</prop> <prop key="MaxLimit">1</prop> </props> </property>