// Engineering Log
PgBouncer, Pgpool-II и другие: пулеры соединений для PostgreSQL
Опубликовано 22.09.2026
// Быстрый маршрут
Эта статья относится к теме Серверы и инфраструктура.
Пулер соединений для PostgreSQL — это программа между приложением и базой, которая держит небольшое число реальных подключений к серверу и раздаёт их клиентам по очереди. Самые известные — PgBouncer и Pgpool-II, из новых — Odyssey и PgCat.
Зачем PostgreSQL пулер
Каждое подключение к PostgreSQL обслуживает отдельный процесс сервера. Когда приложение открывает сотни подключений — много воркеров, серверлесс-функции, несколько сервисов, — сервер тратит память и время на процессы, а не на запросы. Пулер принимает тысячи клиентских подключений и пропускает их через несколько десятков серверных. Базовые настройки PostgreSQL и место пулера в общей картине описаны в третьей части цикла, здесь — подробности.
PgBouncer
PgBouncer — лёгкий однопоточный пулер, стандартный выбор для большинства проектов. Актуальная ветка — 1.25 (выпуск 1.25.2 вышел в мае 2026 года). Он ничего не знает о структуре базы и только управляет подключениями.
Режимы пула
- session (по умолчанию) — серверное подключение закреплено за клиентом, пока тот не отключится. Совместим со всем, но экономии почти не даёт.
- transaction — подключение возвращается в пул после окончания транзакции. Основной режим для экономии: сотни клиентов обслуживаются десятком подключений.
- statement — подключение возвращается после каждого запроса; транзакции из нескольких запросов запрещены.
Что ломается в режиме transaction
Между транзакциями клиент может попасть на другое серверное подключение, поэтому не работает всё, что хранит состояние сессии. По документации PgBouncer несовместимы с режимом transaction:
SETиRESETна уровне сессии;LISTEN;- курсоры
WITH HOLD; - SQL-команды
PREPAREиDEALLOCATE; - временные таблицы с
PRESERVEилиDELETE ROWS; LOAD;- рекомендательные блокировки (advisory locks) на уровне сессии.
Подготовленные запросы на уровне протокола — их используют драйверы вроде JDBC и asyncpg — PgBouncer в новых версиях поддерживает и в режиме transaction: он сам подготавливает их на серверных подключениях. За это отвечает параметр max_prepared_statements (в текущей документации по умолчанию 200; значение 0 выключает поддержку).
Минимальная конфигурация
[databases]
app = host=127.0.0.1 port=5432 dbname=app
[pgbouncer]
listen_addr = 127.0.0.1
listen_port = 6432
auth_type = scram-sha-256
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 20Приложение подключается к порту 6432 вместо 5432. default_pool_size — сколько серверных подключений держится на пару «пользователь — база» (по умолчанию 20), max_client_conn — сколько клиентов может подключиться к самому PgBouncer (по умолчанию 100).
Pgpool-II
Pgpool-II — не только пулер, а связующее звено для кластера: балансировка чтения между репликами, автоматическое переключение при отказе основного сервера, сторожевой процесс (watchdog) для отказоустойчивости самого Pgpool. Актуальная ветка — 4.7 (выпуск 4.7.2, июнь 2026 года), поддерживаются ветки с 4.3 по 4.7.
Платой за возможности становится сложность: Pgpool-II разбирает SQL, чтобы решить, куда отправить запрос, у него больше настроек и больше мест для ошибки. Его пул работает по модели «процесс на клиента», поэтому для экономии подключений он проще и эффективнее в связке, где пул держит PgBouncer.
PgBouncer или Pgpool-II
| PgBouncer | Pgpool-II | |
|---|---|---|
| Главная задача | пул соединений | балансировка, переключение, пул |
| Разбор SQL | нет | да |
| Разделение чтения и записи | нет | да |
| Сложность настройки | низкая | высокая |
| Типичное место | перед каждой базой | перед кластером с репликами |
Если нужен только пул — PgBouncer. Если нужно автоматически распределять чтение по репликам и переключаться при отказе и вы готовы поддерживать сложную конфигурацию — Pgpool-II. Для отказоустойчивого кластера сегодня часто берут Patroni, а перед ним — PgBouncer и HAProxy (подробнее о HAProxy — в цикле о прокси).
Odyssey
Odyssey — многопоточный пулер, созданный в Яндексе, лицензия BSD-3-Clause, проект активно развивается (выпуск 1.5.2 — сентябрь 2026 года). Он рассчитан на большие нагрузки, где однопоточный PgBouncer упирается в одно ядро процессора. Для большинства проектов это избыточно, но при десятках тысяч подключений стоит сравнить его с несколькими экземплярами PgBouncer.
PgCat
PgCat — пулер на Rust с шардированием и балансировкой, лицензия MIT. Проект заметно замедлился: последний выпуск 0.2.5 вышел в ноябре 2024 года, последние изменения в репозитории — в феврале 2025-го. Для новых продакшен-установок его стоит выбирать осторожно.
Типичные ошибки
- Режим transaction без проверки приложения.
SET search_path,LISTENили сессионные блокировки начинают вести себя непредсказуемо. - Пулер как единая точка отказа. Ставьте его рядом с каждым сервером приложения или в двух экземплярах.
- Сумма пулов больше
max_connectionsсервера. Считайтеdefault_pool_size× число пар «пользователь — база» плюс резерв для администратора. - Два пула подряд. Пул в приложении с большим размером поверх PgBouncer не экономит подключения, а только усложняет диагностику.
Полезные ссылки
// Похожая задача
Если у вас похожая ситуация
Эта статья относится к одной из рабочих тем. Можно продолжить чтение по теме, перейти на главную, чтобы понять, чем я занимаюсь, или сразу открыть услуги.
Тема статьи
Серверы и инфраструктура
VPS, Linux, веб-стек, миграции, хостинг, базы данных и базовая эксплуатация.
Часто с этим приходят
- Перенести сайт или сервис на новый сервер
- Настроить Linux, Nginx, базу данных и бэкапы
- Разобраться, почему всё работает нестабильно
// Следующий шаг
Если вам нужна не только статья, а помощь по этой теме, удобнее сразу перейти в услугу. Главная и подборка материалов остаются рядом.
Открыть услуги// Reviews
Отзывы по теме
Пришел с дорогим запросом по настройке VPS-сервера, но в процессе консультации Михаил предложил гораздо более простое и экономичное решение. В итоге сэкономил бюджет и время. Михаил — настоящий эксперт, который работает на результат клиента, а не на чек. Рекомендую!
Пришел с дорогим запросом по настройке VPS-сервера, но в процессе консультации Михаил предложил гораздо более простое и экономичное решение. В итоге сэкономил бюджет и время. Михаил — настоящий эксперт, который работает …
Настройка vps, настройка сервера
12.05.2026 · ★ 5/5
Отличная работа! Очень быстро настроил сервер, установил панель, прописал IP. Однозначно могу порекомендовать!
Отличная работа ! Очень быстро настроил сервер, установил панель прописал IP Однозначно могу по рекомендовать !
Всё отлично, помог оперативно и профессионально, спасибо, рекомендую сообществу
Всё отлично, помог оперативно и профессионально, спасибо, рекомендую сообществу
Настройка vps, настройка сервера
16.04.2026 · ★ 5/5
Было несколько проблем касаясь как технической части так и понимания в целом. Михаил быстро ответил на запрос, помог разобраться и решил проблеммы технические и помог разобраться в понимании, за что отдельное спасибо. Результатом доволен.
Было несколько проблем касаясь как технической части так и понимания в целом. Михаил быстро ответил на запрос, помог разобраться и решил проблеммы технические и помог разобраться в понимании, за что отдельное спасибо. …
Настройка vps, настройка сервера
18.02.2026 · ★ 5/5
Все было сделано быстро и четко. Рекомендую
Все было сделано быстро и четко. Рекомендую
Настройка vps, настройка сервера
17.01.2026 · ★ 5/5
Всё прошло хорошо, исполнитель быстро реагировал на вопросы и помог решить проблему. Спасибо!
Всё прошло хорошо, исполнитель быстро реагировал на вопросы и помог решить проблему. Спасибо!
Настройка vps, настройка сервера
16.12.2025 · ★ 5/5
// Contact
Нужна помощь?
Свяжись со мной и я помогу решить проблему
Написать в TelegramОтвечаю в течение рабочего дня (03:00–13:00 GMT)
Или оставьте заявку здесь:
// Related