Перейти к содержанию

Возможности

Возможности PgBouncer: режимы пула и совместимость с SQL
  • Несколько уровней строгости при перераспределении соединений:

    Сеансовый режим пула
    Наиболее щадящий метод. При подключении клиента ему назначается серверное соединение на всё время клиентского соединения. После отключения клиента серверное соединение возвращается в пул. Этот режим поддерживает все возможности PostgreSQL.
    Транзакционный режим пула
    Серверное соединение назначается клиенту только на время транзакции. Когда PgBouncer определяет завершение транзакции, серверное соединение возвращается в пул. Этот режим нарушает работу некоторых сеансовых возможностей PostgreSQL. Его можно использовать, только если приложение не применяет несовместимые возможности. Они перечислены в таблице ниже.
    Режим пула на уровне операторов
    Наиболее строгий метод. Это транзакционный режим пула с дополнительным ограничением: транзакции из нескольких операторов запрещены. Такой режим принудительно обеспечивает клиентский режим «autocommit» и в основном предназначен для PL/Proxy.
  • Низкое потребление памяти (по умолчанию 2 kB на соединение), поскольку PgBouncer не требуется получать пакеты целиком.

  • Нет привязки к одному серверу бэкенда. Целевые базы данных могут находиться на разных узлах.

  • Для большинства параметров поддерживается изменение конфигурации без остановки обслуживания.

  • Поддерживаются поэтапные перезапуски и обновления с использованием нескольких процессов и параметра so_reuseport . Прежний перезапуск без остановки обслуживания (-R) удалён в версии 1.26.0.


Совместимость возможностей SQL с режимами пула

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

Возможность Сеансовый режим Транзакционный режим
Параметры запуска 1 Да Да
SET/RESET Да Для отслеживаемых параметров 1
LISTEN Да Никогда
NOTIFY Да Да
WITHOUT HOLD CURSOR Да Да
WITH HOLD CURSOR Да Никогда
Подготовленные планы протокола Да Да 2
PREPARE / DEALLOCATE Да Никогда
Временные таблицы ON COMMIT DROP Да Да
Временные таблицы PRESERVE/DELETE ROWS Да Никогда
Сброс кэшированного плана Да Да
Оператор LOAD Да Никогда
Сеансовые рекомендательные блокировки Да Никогда

  1. Начиная с версии 1.26.0 PgBouncer отслеживает все сообщаемые сервером параметры, которые клиенты могут изменять: application_name, client_encoding, DateStyle, default_transaction_read_only (PostgreSQL 14+), IntervalStyle, scram_iterations (PostgreSQL 16+), search_path (PostgreSQL 18+), session_authorization, standard_conforming_strings и TimeZone. Для параметров, которые сервер не сообщает, отслеживаются только значения, заданные при запуске; последующие изменения через SET не отслеживаются. Подробности и сведения о параметрах, предоставляемых расширениями, см. в описаниях track_extra_parameters и ignore_startup_parameters . ↩︎ ↩︎

  2. Поддержка подготовленных операторов на уровне протокола включается, когда параметр max_prepared_statements имеет ненулевое значение. По умолчанию он равен 200; значение 0 отключает эту поддержку. Операторы PREPARE / DEALLOCATE на уровне SQL остаются несовместимыми с транзакционным режимом пула, за исключением DEALLOCATE ALL и DISCARD ALL при включённом отслеживании. ↩︎