Быть в курсе
Аватарка автора Редакция Рег.облако
БезопасностьОблако

Как установить и запустить PgBouncer для PostgreSQL

27 февраля 2026

17 минут

Телеграм

ВКонтакте

Современные веб‑приложения и микросервисы часто сталкиваются с проблемой: число подключений к базе данных резко растет. Когда система масштабируется, количество запросов от клиентов может достигать тысяч в секунду. А в PostgreSQL каждое такое подключение запускает отдельный серверный процесс.

В итоге:

Всё актуальное — в наших соцсетях. Подписывайтесь!
  • быстро исчерпывается лимит одновременных сессий (параметр max_connections);
  • процессор перегружается из‑за постоянных операций по установлению соединений и аутентификации;
  • приложение начинает работать медленнее ― время отклика растет из‑за очередей на подключение;
  • память используется неэффективно, поскольку многие соединения либо простаивают, либо задействуются лишь время от времени.

На первый взгляд, нужно просто увеличить параметр max_connections. Но это только ухудшает ситуацию: рост числа соединений ведет к резкому увеличению потребления памяти (5-10 МБ на каждое подключение), перегрузке CPU из‑за переключений между процессами и, как следствие, потере стабильности системы даже при умеренной нагрузке.

А решить эту проблему помогают пулеры соединений. Дальше мы расскажем, что это такое и как начать работать с PgBouncer.

Что такое пулер соединений

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

В обычной схеме работы приложение при обращении к базе данных устанавливает соединение, выполняет запрос и закрывает его. На практике такие операции происходят сотни и тысячи раз в секунду. Каждый цикл «создать → аутентифицироваться → выполнить → закрыть» требует времени и ресурсов сервера базы данных. При высокой нагрузке это приводит к:

  • росту потребления CPU и памяти;
  • увеличению времени отклика;
  • исчерпанию лимита подключений;
  • нестабильной работе приложения.

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

Принцип работы прост:

  1. Клиент подключается к пулеру, а не напрямую к PostgreSQL.
  2. Пулер проверяет наличие свободного соединения в пуле с нужными параметрами.
  3. Если соединение есть ― передает его клиенту; если нет ― создает новое или ставит запрос в очередь.
  4. После завершения работы клиента физическое подключение возвращается в пул, а не закрывается.

Один из самых популярных инструментов для PostgreSQL ― PgBouncer.

Источник: Freepik. Современные веб-приложения и микросервисы сталкиваются с резким ростом числа подключений к базе данных при масштабировании

Что такое PgBouncer

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

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

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

Его часто используют на серверах с ограниченной производительностью, в высоконагруженных веб-проектах и в микросервисной архитектуре.

Преимущества пуллинга

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

Кроме того, он:

  • снижает нагрузку на сервер БД за счет уменьшения числа физических подключений;
  • экономит оперативную память, позволяя одному соединению обслуживать множество клиентов;
  • ускоряет отклик приложения благодаря исключению накладных расходов на установление новых соединений;
  • обеспечивает контроль нагрузки, не допуская превышения лимита max_connections;
  • повышает масштабируемость системы при тех же аппаратных ресурсах;
  • стабилизирует работу системы за счет равномерного распределения подключений и управления очередями;
  • не требует изменений в коде клиентских приложений;
  • позволяет гибко настраивать параметры пула под конкретные требования;
  • улучшает утилизацию ресурсов за счет повторного использования простаивающих соединений;
  • снижает риск сбоев из-за исчерпания лимита подключений.
Источник: Freepik. Каждое подключение к PostgreSQL запускает отдельный серверный процесс, что быстро приводит к исчерпанию лимита max_connections и перегрузке CPU

Подготовка к установке PgBouncer

Перед установкой PgBouncer нужно подготовить сервер: он будет работать между приложением и PostgreSQL. Значит, нужен стабильный сервер с достаточным объемом оперативной памяти, настроенной сетью и доступом к базе данных.

Если вы разворачиваете инфраструктуру с нуля, удобно использовать облачные решения Рег.облака. Платформа позволяет быстро создать виртуальный сервер с нужной конфигурацией, выбрать подходящий объем CPU и RAM, а также гибко масштабировать ресурсы по мере роста нагрузки. Это особенно актуально для проектов, где важно контролировать количество соединений и обеспечивать стабильную работу PostgreSQL при пиковых обращениях.

Для установки PgBouncer потребуется:

  • сервер с установленной PostgreSQL;
  • доступ по SSH с правами администратора;
  • открытые сетевые порты для подключения клиентов;
  • обновленная система и настроенный брандмауэр.

Далее мы покажем процесс установки и настройки PgBouncer на Ubuntu и Debian.

Если вы не хотите самостоятельно администрировать PostgreSQL, обратите внимание на Managed Databases от Рег.облако. Это сервис управляемых баз данных, который берет на себя установку, настройку, резервное копирование и мониторинг PostgreSQL. Вам останется только подключить PgBouncer к готовому инстансу и сосредоточиться на оптимизации пула соединений, а не на обслуживании сервера БД.

Установка PgBouncer

Устанавливать PgBouncer будем на Ubuntu 24.04 через официальный репозиторий. Этот способ позволит получать актуальные версии пакета и обновления безопасности.

Сначала установите необходимые утилиты для работы с репозиториями и сертификатами:

Создайте каталог для хранения ключа подписи репозитория:

Импортируйте официальный ключ PGDG:

Добавьте репозиторий PostgreSQL в систему:

Обновите список пакетов, чтобы система начала использовать новый репозиторий:

Установите PgBouncer:

Источник: Freepik. Пулер соединений — это промежуточный сервис, который управляет подключениями клиентов и переиспользует уже открытые соединения вместо создания новых

Настройка PgBouncer и подключение к PostgreSQL

Теперь необходимо выполнить базовую настройку PgBouncer и разрешить ему доступ к серверу PostgreSQL.

Откройте файл /etc/pgbouncer/pgbouncer.ini и укажите параметры подключения к серверу базы данных в секции [databases]:

Вместо POSTGRESQL_IP укажите IP-адрес сервера PostgreSQL, а вместо POSTGRESQL_PORT ― порт (по умолчанию 5432).

Вы также можете изменить параметр listen_addr, чтобы PgBouncer принимал подключения по TCP. Например, значение * позволит слушать соединения на всех сетевых интерфейсах. Кроме того, можно указать конкретный список IP-адресов.

Далее создайте или отредактируйте файл /etc/pgbouncer/userlist.txt. В нем перечисляются пользователи, которым разрешено подключаться через PgBouncer:

Замените USERNAME на имя пользователя PostgreSQL. В тестовой среде можно оставить пароль пустым ― если используется метод аутентификации trust. Но в продакшене так делать не стоит: выберите более безопасный метод.

Теперь добавьте IP-адрес сервера PgBouncer в файл pg_hba.conf PostgreSQL:

Где PGBOUNCER_IP ― IP-адрес сервера, где установлен PgBouncer, а NETMASK ― соответствующая маска сети.

Прописав изменения, перезапустите или перезагрузите PostgreSQL, чтобы новые правила вступили в силу.

Также перезагрузите сервис PgBouncer:

Теперь можно проверить подключение к базе данных через PgBouncer. По умолчанию он работает на порту 6432:

Если параметры указаны корректно, соединение с PostgreSQL будет установлено через пулер.

Источник: Freepik. Приложения получают соединение из пула заранее открытых подключений, а после выполнения запроса соединение возвращается обратно для повторного использования

Настройка аутентификации в PgBouncer

По умолчанию PgBouncer работает в режиме trust ― он пропускает подключения без проверки пароля. Для тестов это допустимо, но в рабочей среде такой способ небезопасен.

Лучше переключиться на метод HBA: он дает возможность гибко настраивать правила доступа ― указывать разрешенные IP‑адреса и выбирать способы аутентификации. Это существенно повышает безопасность системы.

В файле /etc/pgbouncer/pgbouncer.ini измените параметры:

Далее создайте файл /etc/pgbouncer/pb_hba.conf со следующими правилами:

Создайте или отредактируйте файл /etc/pgbouncer/userlist.txt, в котором указываются пользователи и их пароли:

Можно использовать обычный пароль, MD5-хеш или SCRAM-хеш. Для продакшена предпочтителен scram-sha-256.

Хешированные пароли можно получить в PostgreSQL из таблицы pg_shadow:

Далее добавьте IP-адрес сервера PgBouncer в файл pg_hba.conf PostgreSQL:

Внеся изменения в pg_hba.conf, перезагрузите или перезапустите PostgreSQL, а затем примените изменения в PgBouncer:

Источник: Freepik. PgBouncer — это лёгкий и высокопроизводительный пулер соединений для PostgreSQL, который снижает нагрузку на сервер базы данных

Рекомендуемые параметры конфигурации PgBouncer

Чтобы PgBouncer работал эффективно, важно правильно задать базовые параметры. Рассмотрим основные настройки для рабочей среды.

pool_mode

Определяет режим пуллинга. Может задаваться глобально или для конкретной базы. По умолчанию используется session.

Доступные значения:

  • session ― соединение закрепляется за клиентом на все время сессии;
  • transaction ― соединение выделяется только на время транзакции;
  • statement ― соединение используется для выполнения одного запроса.

Для большинства высоконагруженных веб-приложений выбирают transaction, так как он обеспечивает лучший баланс между производительностью и совместимостью.

max_client_conn

Определяет максимальное количество клиентских подключений к PgBouncer. По умолчанию ― 100.

Этот параметр задает лимит на количество входящих соединений. Если установить слишком маленькое значение, новые подключения будут отклоняться. На практике лимит обычно выставляют с запасом, а фактическую нагрузку регулируют через параметр pool_size.

Формула расчета ресурсов:

Если планируется большое количество соединений, необходимо увеличить лимит файловых дескрипторов в системе.

reserve_pool_size

Позволяет использовать резервный пул соединений, если основной pool_size исчерпан. По умолчанию ― 0.

Рекомендуется задавать значение в диапазоне 5-10. Когда PgBouncer задействует резервный пул соединений, он фиксирует это в логах. Анализируя их, можно понять, нужно ли увеличивать параметр pool_size.

application_name_add_host

Добавляет IP-адрес и порт клиента к параметру application_name. По умолчанию ― 0.

Полезно при диагностике, так как подключение через PgBouncer скрывает реальный IP клиента от PostgreSQL.

server_round_robin

Определяет алгоритм повторного использования серверных соединений. По умолчанию PgBouncer использует LIFO (last-in, first-out).

Если за IP‑адресом PostgreSQL стоит балансировщик с алгоритмом round‑robin, этот параметр поможет распределять нагрузку равномернее и улучшит работу соединений.

PgBouncer управляет соединениями, но сами данные хранятся в PostgreSQL. Чтобы защитить их от сбоев, настройте регулярное резервное копирование. Сервис резервного копирования Рег.облако автоматически создаёт снапшоты ваших серверов и баз данных по гибкому расписанию.

Источник: Freepik. Клиенты подключаются не напрямую к PostgreSQL, а к PgBouncer, который распределяет ограниченный набор соединений между всеми клиентами

Подключение к административной консоли PgBouncer

Чтобы управлять PgBouncer, нужно подключиться к его служебной базе данных pgbouncer через программу psql. Для этого сначала установите клиент PostgreSQL. Рекомендуется использовать актуальную стабильную версию ― например, PostgreSQL 18:

Далее необходимо назначить администратора, который сможет подключаться к базе pgbouncer. Откройте файл /etc/pgbouncer/pgbouncer.ini и укажите параметр:

Где pgbouncer ― имя пользователя, которому разрешен доступ к административной консоли. При необходимости можно указать несколько пользователей через запятую.

Перезагрузите сервис:

Теперь можно подключиться к административной базе PgBouncer:

Если все настроено корректно, откроется консоль управления PgBouncer, где доступны команды для просмотра пулов соединений, статистики и текущих подключений.

Источник: Freepik. Пулинг соединений снижает нагрузку на сервер, экономит память, ускоряет отклик приложения и повышает масштабируемость системы без изменений в коде

Полезные команды административной консоли PgBouncer

Через psql можно подключиться к базе pgbouncer и управлять пулером с помощью специальных команд. Они позволяют следить за нагрузкой, проверять соединения и обслуживать сервер:

Команда Назначение
SHOW HELP; Выводит справку по доступным командам
SHOW STATS; Показывает статистику: количество транзакций, время выполнения и другую служебную информацию
SHOW POOLS; Отображает активных и ожидающих клиентов, количество серверных соединений, а также время ожидания самого «старого» клиента; помогает подобрать оптимальный pool_size
SHOW SERVERS; Показывает информацию о соединениях PgBouncer с PostgreSQL
SHOW CLIENTS; Отображает данные о клиентах, подключенных через PgBouncer
SHOW DATABASES; Выводит список настроенных баз данных и параметры подключения
PAUSE [DB]; Приостанавливает подключения к указанной базе: PgBouncer ждет завершения текущих запросов и ставит новые соединения в очередь; полезно при перезапуске PostgreSQL
RESUME [DB]; Возобновляет работу базы после PAUSE, KILL или SUSPEND
RECONNECT [DB]; Закрывает и заново устанавливает все серверные соединения; используется при смене мастера или переключении ноды;
DISABLE [DB]; Запрещает новые подключения к указанной базе
ENABLE [DB]; Снова разрешает подключения после выполнения DISABLE
KILL [DB]; Разрывает все клиентские и серверные соединения и приостанавливает работу базы
RELOAD; Перечитывает конфигурацию PgBouncer без остановки сервиса
SHUTDOWN; Завершает процесс PgBouncer; в рабочей среде предпочтительно использовать systemd

Онлайн-перезапуск PgBouncer

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

Этот способ полезен при обновлении PgBouncer или изменении конфигурации в рабочей среде, где важно избежать простоя и разрыва клиентских подключений.

Чтобы выполнить онлайн-перезапуск, пропишите команду:

Заключение

Итак, в этой статье мы рассмотрели, как установить и запустить PgBouncer для PostgreSQL на Linux.

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

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

Блок FAQ

Что такое PgBouncer?

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

Зачем нужен пулер соединений?

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

Какие режимы пуллинга существуют?

В PgBouncer есть три режима пуллинга:

  • session ― соединение закрепляется за клиентом на все время сессии;
  • transaction ― соединение выделяется только на время транзакции;
  • statement ― соединение используется для выполнения одного запроса.

Чем короче удержание соединения, тем выше эффективность, но ниже совместимость с некоторыми функциями PostgreSQL.

Где находится конфигурация PgBouncer?

Основной конфигурационный файл PgBouncer располагается по пути /etc/pgbouncer/pgbouncer.ini.

Как подключить PostgreSQL к PgBouncer?

Нужно указать параметры PostgreSQL в /etc/pgbouncer/pgbouncer.ini в секции [databases], например:

Поддерживает ли PgBouncer SSL?

Да, PgBouncer поддерживает SSL. Можно настроить шифрование как между клиентом и PgBouncer, так и между PgBouncer и PostgreSQL. Для этого в pgbouncer.ini указываются параметры client_tls_* и server_tls_*, а также сертификаты и ключи.

Как проверить активные соединения?

Подключитесь к административной базе pgbouncer и выполните:

Команда покажет активных и ожидающих клиентов, количество серверных соединений и загрузку пула.

Дополнительно можно использовать:

Как PgBouncer влияет на производительность?

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

Есть ли ограничения у PgBouncer?

Да, PgBouncer есть ряд ограничений:

  • в режимах transaction и statement не поддерживаются некоторые функции (например, временные таблицы и часть подготовленных запросов);
  • не подходит для приложений, где соединение должно быть закреплено за клиентом постоянно;
  • не может распределять нагрузку между серверами и не управляет репликацией;
  • требует корректной настройки пула и лимитов, иначе возможны очереди и задержки.

Но если грамотно настроить PgBouncer, эти ограничения обычно не мешают работе большинства веб‑приложений.

Как обновлять PgBouncer?

Обновить PgBouncer можно через пакетный менеджер:

После обновления перезапустите сервис:

Чтобы избежать разрыва соединений, можно выполнить онлайн-перезапуск:

Новые статьи