Перейти к основному содержимому

Автоматическое завершение неактивных соединений

Описание

Соединения, остающиеся неактивными определенное время, подлежат принудительному завершению. Для завершения таких соединений используется добавленный фоновый процесс «idle sessions terminator», осуществляющий мониторинг и завершение бездействующих клиентских сеансов. Этот процесс запускается при старте сервера СУБД Pangolin и завершается вместе с остановкой сервера.

Настройка

Для активации фонового процесса мониторинга и прерывания бездействующих клиентских соединений необходимо задать конфигурационные параметры указанные в разделе далее.

Если хотя бы один из этих параметров равен нулю, неактивные соединения завершаться не будут – поведение по умолчанию.

Параметры хранятся в различных файлах:

  • для standalone-конфигурации — в файле postgresql.conf;
  • для кластерной конфигурации — в файле postgres.yml.

Для применения данных параметров требуется перечитать конфигурацию.

Конфигурационные параметры

Параметр

Тип данных

Значение по умолчанию

Допустимые значения

Описание

check_idle_time_delay

integer

0

[0 - 60000]

Интервал мониторинга в миллисекундах

backend_idle_alive_time

integer

0

[0 - 86400]

Допустимое время бездействия в секундах

Внимание!

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

Сценарии использования

Соединения, бездействующие более заданного времени, закрываются автоматически

  1. Задайте конфигурационные параметры для активации функциональности:

    check_idle_time_delay = 1000
    backend_idle_alive_time = 10

    Для применения перечитайте конфигурацию:

    SELECT pg_reload_conf();

    pg_reload_conf
    ----------------
    t
    (1 row)

    В системе появился процесс:

    2611 ? Ss 0:00 postgres: clustername: idle sessions terminator
  2. Откройте несколько соединений к СУБД от разных пользователей.

  3. Подождите половину заданного времени бездействия, затем откройте еще несколько соединений.

  4. После завершения второй половины времени бездействия проверьте, какие соединения остались открыты:

    $ ps ax | grep postgres

    Ожидаемый результат: Неактивные процессы запущенные через 10+1 секунд (так как backend_idle_alive_time – 10 секунд) удалены. Оставшиеся открытые соединения бездействуют меньше заданного времени.