# Пул соединений (PgBouncer) (https://docs.h3llo.cloud/databases/pooler)

> Как включить PgBouncer для PostgreSQL, выбрать режим и адрес подключения.

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

## Включение [#включение]

В карточке базы PostgreSQL — блок «Пул соединений (PgBouncer)». Пул можно приостановить, возобновить и удалить.

| Настройка | Значения |
|---|---|
| Режим | `session` (по умолчанию) или `transaction` |
| Инстансы PgBouncer | 1–4, по умолчанию 2 |
| Адрес | внутренний (по умолчанию) или публичный адрес базы |

**Адрес подключения:**

- **Внутренний** — отдельный адрес пула внутри VPC, порт `5432`. Прямое подключение к базе остаётся.
- **Публичный адрес базы** — внешний IP базы начинает вести в пул; напрямую к PostgreSQL снаружи подключиться
  нельзя. Требуется внешний IP.

Подключение к пулу — с TLS (`sslmode=require`), тем же пользователем и паролем, что и к базе.

## Режимы [#режимы]

- **session** — клиент получает серверное соединение на всю сессию. Работает всё, что работает без пула.
- **transaction** — соединение выдаётся на одну транзакцию. Нельзя полагаться на состояние сессии: `SET` на уровне
  сессии, `LISTEN`, advisory-блокировки, нативные prepared statements.

## Размер пула [#размер-пула]

По умолчанию до 5000 клиентских соединений. Размер серверного пула:

- `session` — 80 % от `max_connections`, поделённые между инстансами PgBouncer;
- `transaction` — `2 × vCPU`, поделённые между инстансами, от 5 до 100.

Пул должен помещаться в лимит базы: `max_connections` ≥ число инстансов × соединений на инстанс + 10. Если не
помещается, увеличьте [`max_connections`](https://docs.h3llo.cloud/databases/postgresql#max_connections).
