Почему юзер иногда получает в браузере ошибку, связанную с Exception: idle transaction timeout?
idle_transaction_timeout устанавливает время, по истечению которого висячие транзакции закрываются автоматически. Значение 600 - это 10 минут. Было бы понятно, если бы Exception: idle transaction timeout возникало в обслуживающих скриптах, выполняющих длинные регулярные задачи в cron. А при каких условиях пользователь, заходящий в браузере на страницу приложения, тут же, без всяких задержек, получает ошибку, которая в логе приложения описывается так:
Exception on /any-url-of-the-application [POST]
...
...
Exception: idle transaction timeout
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Если я правильно понимаю, при каждом открытии страницы pgbouncer достаёт из своего пула свободное соединение с БД, выполняет запросы, и возвращает соединение в пул после того, как сервер отдал страницу клиенту. Он же не может вернуть в пул соединение, в котором есть незавершённая транзакция, чтобы потом отдать это соединение другому клиенту, который получит вышеозначенную ошибку?
Ответы (1 шт):
idle in transaction - не появляется при работа длительных запросов, он появляется если приложение явно открыло транзакцию выполнив begin и не закрыло её, выполнив commit или rollback. Вам нужно разбираться с бэкэнд-приложениеми его пуллером, возможно необходимо добавить автокоммит, потому что idle in transaction - это не нормально. И при таком поведении вы можете терять данные.