Разрыв соединения с postgresql на виртуальной машине Azure

#database #postgresql #azure #ubuntu

#База данных #postgresql #azure #ubuntu

Вопрос:

Я немного новичок в postgresql db. Я выполнил настройку через Azure Cloud для моей базы данных PostgreSQL DB.

Это компьютер Ubuntu 18.04 LTS (4vCPU, 8 ГБ оперативной памяти) с версией PostgreSQL 9.6.

Проблема, которая возникает, заключается в том, что соединение с базой данных PostgreSQL остается незанятым в течение некоторого времени, скажем, от 2 до 10 минут, затем соединение с базой данных не отвечает, поэтому оно не выполняет запрос и продолжает обработку запроса.

То же самое происходит с моим приложением JAVA Spring-boot. Соединение не отвечает, и запрос продолжает обрабатываться.

Это происходит случайным образом, так что время не отслеживается, иногда это происходит через 2 минуты, иногда через 10 минут, а иногда и нет.

Я пробовал использовать параметры файла конфигурации PostgreSQL. Я пытался:

tcp_keepalive_idle, tcp_keepalive_interval, tcp_keepalive_count.

Также параметры statement_timeout и session_timeout, но они все равно не меняются.

Любое предложение или помощь были бы благодарны.

Спасибо

Комментарии:

1. Удалось ли это устранить? Вы можете изучить проблему с журналами сервера PostgreSQL: журналы сервера в базе данных Azure для PostgreSQL — learn.microsoft.com/en-us/azure/postgresql/concepts-server-logs

2. Я не использую базу данных Azure для службы PostgreSQL. Я запускаю PostgreSQL на виртуальной машине. И я видел журналы, в которых есть только одна строка «не удалось получить данные от клиента: время ожидания соединения истекло», вот и все, больше там ничего нет.

3. Вы нашли решение своей проблемы, мы сталкиваемся с точно такой же проблемой, мы не остались в стороне от поиска основной причины?

Ответ №1:

Если вы настраиваете соединение с БД PostgreSQL на виртуальной машине Azure, вы должны знать, что существуют тайм-ауты несвязанных и исходящих подключений. Согласно https://learn.microsoft.com/en-us/azure/load-balancer/load-balancer-outbound-connections#idletimeout Время ожидания исходящих соединений составляет 4 минуты. Это время ожидания не регулируется. Для входящего тайм-аута есть возможность изменить на портале Azure.

Мы столкнулись с аналогичной проблемой и смогли решить ее на стороне клиента. Мы изменили конфигурацию Hikari по умолчанию при весенней загрузке следующим образом:

хикари:

  • время ожидания соединения: 20000

  • время ожидания проверки: 20000

  • время ожидания: 30000

  • максимальный срок службы: 40000

  • минимальное время простоя: 1
  • максимальный размер пула: 3
  • подключение-тест-запрос: ВЫБЕРИТЕ 1
  • подключение-инициализация-sql: ВЫБЕРИТЕ 1

Комментарии:

1. Спасибо, что поделились! Я попробовал эти настройки, и они улучшили ситуацию, но не полностью решили проблемы с подключением для меня полностью.