Установка:
- Oracle 12 DB
- JBoss EAP7
- Веб-сервис, работающий на JBoss, вставляется в БД
- Пакетная программа, вызывающая веб-сервис из нескольких потоков, около 130.000 раз за час
Проблема:
2018-04-26 18: 20: 44,675 +0200 [WARN] [com.arjuna.ats.arjuna] (Жнец транзакций) ARJUNA012117: TransactionReaper :: таймаут проверки для TX 0: ffffac110923: -4c44ed1d: 5ac9329e: 6866ea в состоянии RUN
2018-04-26 18: 20: 44,675 +0200 [WARN] [com.arjuna.ats.arjuna] (Жнец транзакций 0) ARJUNA012095: Отмена идентификатора действия 0: ffffac110923: -4c44ed1d: 5ac9329e: 6866ea в то время как в нем активно несколько потоков.
2018-04-26 18: 20: 44,679 +0200 [WARN] [com.arjuna.ats.arjuna] (Жнец транзакции 0) ARJUNA012381: Идентификатор действия 0: ffffac110923: -4c44ed1d: 5ac9329e: 6866ea выполнено с несколькими потоки - задание по умолчанию потока 48 выполнялось с xxx.BaseEntity.getNextValue (BaseEntity.java:28)
Это обычно происходит в производственной среде при большой нагрузке, а не при обработке меньшего количества записей и не в идентичной тестовой среде с точно такой же нагрузкой.
Последняя строка показывает, что этот тайм-аут транзакции (300 с) происходит при извлечении следующего значения из последовательности:
CREATE SEQUENCE "XXX_S" MINVALUE xxx MAXVALUE xxx INCREMENT BY 1 START WITH xxx CACHE 2 NOORDER NOCYCLE NOPARTITION ;
Я знаю, что Oracle необходимо заблокировать / разблокировать последовательность, чтобы она была согласованной, поэтому мои параллельные вызовы веб-службы должны как-то зайти в тупик или вызвать массовую конкуренцию, что приведет к тайм-ауту.
Как мне найти корень этой проблемы? Какими параметрами я могу пытаться манипулировать?