Пулер соединений PgBouncer

В PostgreSQL для обработки каждого соединения клиента создается отдельный процесс. Чем больше число соединений, тем больше процессов, которые используют оперативную память.

Для управления соединениями клиентов можно использовать пулер соединений. Клиенты подключаются не напрямую к PostgreSQL, а к пулеру соединений. При этом поддерживается небольшое количество подключений между пулером и сервером PostgreSQL — пулер создает новое соединение или повторно использует одно из существующих.

В кластерах облачных баз данных PostgreSQL используется пулер соединений PgBouncer. Можно выбрать один из трех режимов пулинга PgBouncer при создании кластера и изменить режим в уже созданном кластере.

Размер пула

Размер пула — это максимальное число соединений между пулером соединений и каждой базой данных PostgreSQL (на каждой из нод кластера).

По умолчанию в кластерах облачных баз данных PostgreSQL размер пула равен 30. Вы можете увеличить это значение — создайте тикет.

Режимы пулинга

Режим пулинга — это стратегия соединения клиента с PostgreSQL. В кластерах облачных баз данных PostgreSQL используется пулер соединений PgBouncer.

PgBouncer поддерживает три режима: режим транзакции (transaction), режим сессии (session) и режим оператора (statement). По умолчанию в облачных базах данных используется режим transaction.

Режим транзакции (transaction)

Соединение с PostgreSQL поддерживается до тех пор, пока не завершится транзакция. Когда транзакция завершается, пулер возвращает соединение в пул.

Режим транзакции снижает нагрузку на ресурсы СУБД, если есть большое количество клиентских подключений.

Ограничения режима transation

Режим transaction нарушает работу некоторых механизмов PostgreSQL. Выберите другой режим, если клиенты используют эти опции. Некоторые флаги подключения могут распределяться между разными клиентами — это может привести к непредсказуемому поведению и некорректным результатам.

В режиме transaction не работают:

Подробнее в списке несовместимых опций.

Режим сессии (session)

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

В отличие от режима транзакции (transaction), этот режим безопасен, повторяет прямое подключение к PostgreSQL, поддерживает все механизмы и подходит для всех клиентов PostgreSQL, но не снижает нагрузку на ресурсы СУБД.

Режим оператора (statement)

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

Этот режим позволяет использовать больше клиентских подключений, чем в режиме транзакции. Режим подойдет, если известно, что каждая транзакция ограничена только одним запросом (включен AUTOCOMMIT).

Изменить режим пулинга

  1. В панели управления перейдите в раздел Облачная платформа ⟶ Базы данных.
  2. Откройте страницу кластера вкладка Настройки.
  3. В блоке Пулер соединений нажмите Изменить и выберите режим пулинга.
  4. Нажмите Сохранить.