Postgres, похоже, теряет соединения от клиентов. Клиенты получают сообщение об ошибке, обычно это означает, что соединение было закрыто сервером, в то время как в то же время сервер получает запись в журнале. Пример:
Nov 14 17:54:15 dev-db0 postgres[29523]: [219-1] 2014-11-14 17:54:15 GMT [29523]: [2-1] user=******,db=******,remote=10.0.13.1(51491) LOG: could not receive data from client: Connection timed out
Насколько я понимаю, это в первую очередь происходит для клиентов Windows и происходит на нескольких разных серверах баз данных, физических и виртуальных. Я впервые узнал об этой проблеме, когда у пользователя, пытающегося получить доступ к postgres через VPN, возникла проблема, но проверка журналов показывает, что это происходит и с локальными клиентами, хотя VPN, похоже, делает это чаще.
Я перепробовал все настройки keepalive в postgresql.conf (tcp_keepalives_idle
, tcp_keepalives_interval
и tcp_keepalives_count
), а также туннелирование соединения с базой данных через SSH, но, похоже, это не имеет никакого значения.
Хотя на стороне сервера указывается тайм-аут, на стороне клиента обычно говорится о сбросе соединения одноранговым узлом или аналогичном. Самый надежный способ воспроизвести это - выполнить большие / длинные запросы; pgadmin и tomcat кажутся более восприимчивыми к нему, чем psql.