Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

PGBOUNCER_POOL_EXHAUSTED 1С:Предприятие и СУБД

Развертывание пулера соединений PgBouncer: режимы session, transaction, statement

Обновлено: 26.08.2026 · Официальная документация ↗
  • Ошибка FATAL: sorry, too many clients already при всплеске пользовательских сессий.
  • Сотни процессов postgres: client backend утилизируют всю оперативную память сервера.
  • Ошибки PREPARE statement already exists или сбои временных таблиц при использовании режима Transaction Pooling.

1. Конфигурация /etc/pgbouncer/pgbouncer.ini

[databases]
* = host=127.0.0.1 port=5432 auth_user=postgres

[pgbouncer]
logfile = /var/log/postgresql/pgbouncer.log
pidfile = /var/run/postgresql/pgbouncer.pid
listen_addr = 0.0.0.0
listen_port = 6432
auth_type = scram-sha-256
auth_file = /etc/pgbouncer/userlist.txt

# --- Выбор режима пулинга ---
# session: полное соответствие поведению прямого подключения (рекомендовано для 1С)
# transaction: максимальная плотность соединений (требует отключения server-side prepared statements)
pool_mode = session

# --- Лимиты соединений ---
max_client_conn = 2000        # Максимум входящих клиентских подключений к PgBouncer
default_pool_size = 50        # Лимит реальных бэкенд-соединений к PostgreSQL на одну базу
min_pool_size = 10
reserve_pool_size = 5
max_db_connections = 150      # Суммарный лимит соединений к конкретной БД

2. Создание файла пользователей /etc/pgbouncer/userlist.txt

"postgres" "SCRAM-SHA-256$4096:5x...=="
"enterprise_user" "SCRAM-SHA-256$4096:a8...=="

3. Диагностика пулов и очередей через административную консоль

psql -p 6432 -U postgres -d pgbouncer

-- Просмотр очередей клиентов и свободных бэкенд-серверов
SHOW POOLS;

-- Статистика соединений и трафика
SHOW STATS;

-- Просмотр активных клиентских сокетов
SHOW CLIENTS;
💡 Практика специалистов: Если используется pool_mode = transaction для микросервисов, обязательно настройте параметр max_prepared_statements в PgBouncer 1.21+ или отключите prepared statements на стороне клиентов, иначе возникнут ошибки 'prepared statement already exists'.

Частые вопросы (FAQ)

Почему для платформы 1С:Предприятие рекомендуется использовать pool_mode = session?

1С активно использует временные таблицы (#tt), переменные сессии и блокировки на уровне сеанса. В режиме transaction пул может вернуть разные серверные соединения на два последовательных запроса одной транзакции, что приведет к потере контекста временных таблиц.

Как работает режим transaction pooling?

Серверное соединение выдается клиенту только на время выполнения одной транзакции (от BEGIN до COMMIT) и немедленно возвращается в общий пул, позволяя обслуживать тысячи клиентов несколькими десятками бэкендов.

Что означает статус 'cl_waiting' в выводе команды SHOW POOLS?

Количество клиентских запросов, ожидающих освобождения серверного подключения в пуле. Рост этого показателя указывает на нехватку default_pool_size или долгие блокировки в базе.

Как применить изменения в pgbouncer.ini без разрыва клиентских сессий?

Подключитесь к консоли pgbouncer и выполните команду RELOAD; либо отправьте сигнал процессу: kill -HUP <pgbouncer_pid>.

Полезные материалы
Рекомендуем