JPA Hibernate Idle в состоянии транзакции вызывает зависание планировщика - PullRequest
0 голосов
/ 08 января 2020

У меня странная проблема с использованием PostgreSQL с JPA и Hibernate.

По расписанию мое приложение запускает метод синхронизации, который обновляет несколько строк в базе данных.

Unfortunatley на каком-то этапе приложения зависает (выполняются дальнейшие запланированные операции).

При более внимательном рассмотрении базы данных используется:

select *
from pg_stat_activity
where (state = 'idle in transaction')
    and xact_start is not null;
-[ RECORD 1 ]----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
datid            | 16384
datname          | db
pid              | 29874
usesysid         | 10
usename          | dbuser
application_name | PostgreSQL JDBC Driver
client_addr      | 172.18.0.4
client_hostname  |
client_port      | 50222
backend_start    | 2020-01-08 09:05:59.121255+00
xact_start       | 2020-01-08 09:06:10.678177+00
query_start      | 2020-01-08 09:06:12.086945+00
state_change     | 2020-01-08 09:06:12.16695+00
wait_event_type  | Client
wait_event       | ClientRead
state            | idle in transaction
backend_xid      | 582857
backend_xmin     | 582857
query            | select assets0_.project_id as project11_4_0_, assets0_.id as id1_4_0_, assets0_.id as id1_4_1_, assets0_.active as active2_4_1_, assets0_.assetid as assetid3_4_1_, assets0_.assettype as assettyp4_4_1_, assets0_.fix as fix5_4_1_, assets0_.name as name6_4_1_, assets0_.origin as origin7_4_1_, assets0_.os as os8_4_1_, assets0_.osversion as osversio9_4_1_, assets0_.project_id as project11_4_1_, assets0_.requestid as request10_4_1_, assets0_.routingdomain_id as routing12_4_1_ from asset assets0_ where assets0_.project_id=$1
backend_type     | client backend

Я увидел, что один из самых простых селекторов зависает в idle in transaction штат. Я предполагаю, что запрос не дал результатов, поэтому приложение ожидает его и не выполняет следующие операции. Можно ли как-то установить таймаут и правильно обработать исключения, возвращаемые этим типом поведения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...