Рейтинг:1

Бездействующее соединение с базой данных потеряно

флаг in

Я могу подключиться к серверу базы данных (Firebird), выполнять запросы и все эти забавные вещи, но после неопределенного периода бездействия следующая попытка запроса генерирует следующую ошибку

Не удалось выполнить сетевой запрос на хост "XX.XX.XX.XX".
Ошибка записи данных в соединение.
Существующее соединение было принудительно закрыто удаленным хостом. .

Ошибка SQL (код = -902):
Неудачное выполнение, вызванное системной ошибкой, препятствующей
успешное выполнение последующих операторов.

При интерактивной работе с использованием Firebird Maestro (релевантность неизвестна) после получения этой ошибки я говорю Maestro отключиться. Затем я могу запустить запрос.

Я не знаю, происходит ли тайм-аут от Firebird или сервера Linux или где-то еще в нашей сети, и я недостаточно знаю о Linux, AWS или нашей сети, чтобы знать, где искать возможности. (радости быть программистом в очень маленькой компании)

флаг sk
Я не очень хорошо знаком с Firebird, и вы не упомянули, из какой программы/языка исходит ошибка, но вам, вероятно, просто нужно включить KeepAlives в настройке/конфигурации соединения (т. е. когда ваше клиентское программное обеспечение устанавливает соединение, указать поддержку активности).
WeststarEric avatar
флаг in
@ChrisS Итак, вы предлагаете мне игнорировать часть о «принудительном закрытии удаленным хостом» и попытаться переопределить поведение на стороне клиента? К сожалению, это влияет на то, как работает Maestro или мой инструмент программирования, и я думаю, что это не тема для этого форума.
Рейтинг:0
флаг ae

Независимо от того, откуда взялся тайм-аут, вы должны быть к нему готовы. Возможно, есть даже несколько тайм-аутов, и ваше соединение все равно будет сброшено после периода бездействия.

Лучше всего использовать библиотеку пула соединений и указать более короткий тайм-аут, чем тот, который вы наблюдаете прямо сейчас (если только он не является неприемлемо низким).

Было бы полезно, если бы вы подробно описали свое развертывание, но я думаю, что в конечном итоге вам нужно исправить клиентскую сторону.

WeststarEric avatar
флаг in
Я вижу, как пул соединений снижает вероятность неактивности соединения при наличии множества одновременных пользователей. В вероятном случае, когда есть только один пользователь, я хотел бы знать, что вызывает отключение, чтобы я мог контролировать период ожидания.
флаг ae
Вы мало рассказали нам о своем развертывании, поэтому дать вам какой-либо совет по этому поводу нелегко. Объединение соединений имеет смысл, даже если у вас есть только один пользователь. Я рекомендую HikariCP: https://github.com/brettwooldridge/HikariCP#microscope-analyses — их конфигурация тайм-аута тоже может быть интересной: https://github.com/brettwooldridge/HikariCP#microscope-analyses.
WeststarEric avatar
флаг in
К сожалению, я рассказал вам все, что знаю о «моем» развертывании. Небольшая компания, большая текучка, мало опыта. Я надеялся на некоторые подсказки о том, где искать.
флаг ae
Вы наверняка знаете больше, чем это. Вы не упомянули никаких подробностей о приложении или компьютерах, на которых размещено приложение и база данных. В любом случае, вы проверили их документы? https://firebirdsql.org/file/documentation/chunk/en/refdocs/fblangref40/fblangref40-management-timeouts.html

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.