Запросы PostgreSQL не уничтожаются при завершении работы сервера приложений - PullRequest
0 голосов
/ 03 мая 2019

У меня есть WildFly, в котором размещено приложение, которое вызывает несколько длительных SQL-запросов (скажем, запросов или вызовов SP, которые занимают 10-20 минут или более).

Ранее этот WildFly указывал на SQL Server 2008, теперь на Postgres 11.

Ранее, когда я убивал / перезагружал WildFly, я заметил, что довольно быстро (если не мгновенно) длительные вызовы SP / запроса, которые были инициированы из кода Java (запущенного в WildFly), тоже убивались .

Теперь ... с Postgres я заметил, что эти долго выполняющиеся запросы остаются там и продолжают работать в Postgres даже после закрытия сервера приложений.

Что вызывает это? Кто их убивал в SQL Server (на стороне сервера или в драйвере JDBC или ...)? Существуют ли какие-либо настройки / параметры в Postgres, которые управляют этим поведением, т. Е. Что сервер БД будет делать с запросом при условии, что клиент, инициировавший запрос, был закрыт.

РЕДАКТИРОВАТЬ: Мы делаем изящное отключение WildFly, отправляя команду в WF, чтобы отключить себя. Тем не менее поведение кажется различным в SQL Server и Postgres.

1 Ответ

1 голос
/ 03 мая 2019

Если завершение работы сервера приложений вызывает вызовы JDBC, которые завершают сеанс базы данных, этого не должно происходить.Если он не закрывает соединение JDBC должным образом, я бы назвал это ошибкой на сервере приложений.Если это так, но запросы на бэкэнде не отменяются, я бы назвал это ошибкой в ​​драйвере JDBC.

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

...