Длинные транзакции блокируют активные соединения в HikariCP - PullRequest
0 голосов
/ 09 января 2020

Я столкнулся с проблемой, когда Java Сервис (HikariCP + JDBC + Oracle, пул = 10) имеет большую транзакцию, которая включает операции с БД и вызовы внешних сервисов, во время выполнения этой транзакции Hikari резервирует соединение (по крайней мере, показывает это через JMX), пока транзакция не будет завершена. Поскольку транзакция является длительной из-за вызовов службы (ее невозможно исключить из транзакции, я уже сократил время ожидания), активное соединение резервируется слишком долго, оно блокирует все службы.

Потоки блокируются в getConnection ( ).

Главное здесь - активное соединение только на Hikari, но не на стороне Oracle, Oracle показывает его как неактивное. Например, Хикари тратит впустую соединение, поскольку в действительности он ничего не делает с БД.

Есть ли в Хикари какая-либо конфигурация для решения этой проблемы? Или может быть какой-то шаблон, как этого избежать?

...