Re: [pgsql-ru-general] Замороженные соединения: postgres_fdw, dblink

From: Alexey Vasiliev <leopard_ne(at)inbox(dot)ru>
To: Aleksey Smart <a4irkin(at)gmail(dot)com>
Cc: pgsql-ru-general <pgsql-ru-general(at)postgresql(dot)org>
Subject: Re: [pgsql-ru-general] Замороженные соединения: postgres_fdw, dblink
Date: 2014-07-25 15:02:55
Message-ID: 1406300575.773251650@f318.i.mail.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general


Добрый день.
Первое и самое разумное решение - диагностировать проблему в коде dblink и исправить (ещё поможет сделать вклад в проект). Но нужно знать С.
Вариант #2: можно использовать background worker, который пишется как дополнение, стартует вместе с базой (доступен с 9.3, тоесть Ваш вариант) и отслеживает подобные "мёртвые" соединения и убивает их. Опять нужно знать совсем чуточку С.
Алексей

Thursday, 24 July 2014, 10:37PM +03:00 from Aleksey Smart <a4irkin(at)gmail(dot)com>:
Доброго времени суток, господа!
Решил обратиться к вам за помощью, потому что не смог найти решения своей проблемы.
Я создал подобие кластера из нескольких машин с PostgreSQL (9.3), каждая машина может обращаться за данными к другим машинам посредством dblink, я не стал использовать postgres_fdw, потому что предпочитаю создавать более высокоуровневый api посредством функций, а через Foreign Data Wrapper можно обращаться только к таблицам. Созданный мною кластер хорошо себя показал на этапе тестирования, но после перевода в продакшн обнаружились серьезные проблемы. Постепенно сервера заполнялись замороженными активными соединениями, переполняя пул. PostgreSQL не хотел перезагружаться, приходилось убивать процессы принудительно. После некоторых опытов выяснилось, что дело в dblink. Если возникает deadlock (поймать его с dblink можно легко) или же пропадает связь с удаленным сервером, dblink вешает процесс соединения намертво. Даже экспериментируя в psql мне удавалось повесить процесс. Что удивительно, statement_timeout пользователя не действует в этом случае, процесс висит вечно. Это совсем плохо, в надежде, что в fdw все исправили, я попробовал и получил то же самое. Я не знаю что происходит на удаленном сервере, но я хочу иметь хоть какой-то рабочий таймаут.
Как же теперь реализовать кластер не получив зависшие процессы?
---
Алексей

In response to

Browse pgsql-ru-general by date

  From Date Subject
Next Message Nikolay Samokhvalov 2014-09-11 09:10:52 Анонс: PostgreSQL-сообщество, Москва, Россия
Previous Message Aleksey Smart 2014-07-24 19:37:45 Замороженные соединения: postgres_fdw, dblink