Перейти к основному содержимому
Пулер соединений PgBouncer
Последнее изменение:

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

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

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

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

Максимальное число соединений с процессом PostgreSQL (max_connections)

Параметр СУБД PostgreSQL max_connections определяет максимальное число одновременных соединений с процессом PostgreSQL. По умолчанию установлено значение 100 соединений.

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

Изменение значения max_connections влечет за собой перезагрузку нод кластера PostgreSQL.

Размер пула (pool_size)

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

Размер пула можно выбрать при создании кластера и изменить размер в созданном кластере. Доступные значения — от 1 до 500.

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

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

PgBouncer поддерживает три режима:

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

Режим пулинга можно выбрать при создании кластера и изменить режим в созданном кластере.

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

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

Общее количество клиентских подключений к PgBouncer может достигать 10 000, но количество активных транзакций определяет размер пула. Например, если размер пула равен 30, то активных транзакций будет 30.

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

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

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

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

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

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

Подробнее о несовместимых опциях в документации PgBouncer.

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

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

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

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

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

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

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

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

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

к сведению

Если вы выбираете режим транзакции (transaction), ознакомьтесь с ограничениями этого режима.

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

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

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