Возможности
Несколько уровней строгости при перераспределении соединений:
- Сеансовый режим пула
- Наиболее щадящий метод. При подключении клиента ему назначается серверное соединение на всё время клиентского соединения. После отключения клиента серверное соединение возвращается в пул. Этот режим поддерживает все возможности PostgreSQL.
- Транзакционный режим пула
- Серверное соединение назначается клиенту только на время транзакции. Когда PgBouncer определяет завершение транзакции, серверное соединение возвращается в пул. Этот режим нарушает работу некоторых сеансовых возможностей PostgreSQL. Его можно использовать, только если приложение не применяет несовместимые возможности. Они перечислены в таблице ниже.
- Режим пула на уровне операторов
- Наиболее строгий метод. Это транзакционный режим пула с дополнительным ограничением: транзакции из нескольких операторов запрещены. Такой режим принудительно обеспечивает клиентский режим «autocommit» и в основном предназначен для PL/Proxy.
Низкое потребление памяти (по умолчанию 2 kB на соединение), поскольку PgBouncer не требуется получать пакеты целиком.
Нет привязки к одному серверу бэкенда. Целевые базы данных могут находиться на разных узлах.
Для большинства параметров поддерживается изменение конфигурации без остановки обслуживания.
Поддерживается перезапуск и обновление без остановки обслуживания и разрыва клиентских соединений.
Совместимость возможностей SQL с режимами пула
В следующей таблице перечислены возможности PostgreSQL и их совместимость с режимами пула PgBouncer. Обратите внимание: транзакционный режим пула по своей архитектуре нарушает ожидания клиента от сервера и может использоваться только в приложениях, которые не применяют несовместимые возможности.
| Возможность | Сеансовый режим | Транзакционный режим |
|---|---|---|
| Параметры запуска 1 | Да | Да |
| SET/RESET | Да | Никогда |
| LISTEN | Да | Никогда |
| NOTIFY | Да | Да |
| WITHOUT HOLD CURSOR | Да | Да |
| WITH HOLD CURSOR | Да | Никогда |
| Подготовленные планы протокола | Да | Да 2 |
| PREPARE / DEALLOCATE | Да | Никогда |
| Временные таблицы ON COMMIT DROP | Да | Да |
| Временные таблицы PRESERVE/DELETE ROWS | Да | Никогда |
| Сброс кэшированного плана | Да | Да |
| Оператор LOAD | Да | Никогда |
| Сеансовые рекомендательные блокировки | Да | Никогда |
Параметры запуска:
client_encoding,DateStyle,IntervalStyle,Timezone,standard_conforming_stringsиapplication_name. PgBouncer отслеживает их изменения и поэтому может гарантировать согласованные значения для клиента. Если PgBouncer должен поддерживать дополнительные параметры, см.track_extra_parametersиignore_startup_parameters. ↩︎Чтобы включить эту поддержку, параметру
max_prepared_statementsнеобходимо присвоить ненулевое значение. ↩︎