TLDR Настраиваем пул соединений к PostgreSQL с PgBouncer by eax.me

Минимальный сетап и на что обратить внимание

pavel trukhanov
some-tldrs-ru
2 min readAug 15, 2018

--

Типичные веб-приложения создают по несколько соединений к СУБД на каждый HTTP-запрос :-\

PostgreSQL не очень хорошо справляется с большим (условно, больше 100) количеством соединений из-за архитектуры «один процесс на соединение». На помощь приходит PgBouncer.

Пример /etc/pgbouncer/pgbouncer.ini

По умолчанию session — сессия будет удерживаться за клиентом до тех пор, пока он не закроет соединение. Чаще всего лучше использовать transaction — соединение возвращается в пул после завершения транзакции. При statement соединение освободится после каждого отдельного выражения, чего вы почти наверняка не должны хотеть.

максимальное количество клиентских соединений — ставим 1000:

Важно!

auth_type по умолчанию — trust — будет пускать в базы всех без пароля. Вы почти наверняка этого не хотите. Меняем на md5

Админка PgBouncer

В pgbouncer.ini

Тогда входим так:

Проверяем, что все работает, запустив pgbench с 900 соединенинями:

Если все было сделано правильно, а выполнив в админке SHOW CLIENTS; увидим 900 соединений. При этом ps uax | grep postgres покажет только 20 бэкендов / процессов PostgreSQL.

Ура!

okmeter.io — мониторинг, который покажет всё всё про Postgres и PgBouncer.

--

--