Connection pooling на собеседовании Data Engineer

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Зачем разбирать на собесе

Connection management — частая боль. На собесе DE: «зачем pgbouncer», «transaction pooling».

Зачем pooling

Postgres connection — heavy:

  • Process-per-connection (Postgres < 17).
  • 5-10 MB memory each.
  • Backend startup ~50-100ms.

100 микросервисов × 20 connections each = 2000 connections → 10-20 GB RAM на DB.

Pooling. Reuse connections.

App ─→ Pool (20 connections) ─→ DB

App opens / closes pool connection (cheap), физическая connection переиспользуется.

pgbouncer

Lightweight Postgres pooler.

[App 1] ─┐
[App 2] ─┼─→ pgbouncer (1000 incoming) ─→ DB (50 backend)
[App 3] ─┘

PG limit — 50 backend connections, app думает о 1000.

Modes:

  • Session pooling. Connection assigned to session for life. Like direct connect.
  • Transaction pooling. Connection per transaction. Аpp гораздо более эффективно.
  • Statement pooling. Connection per statement. Самый strict, не для все workloads.
Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Transaction vs session pooling

Session. Stateful — temporary tables, prepared statements, advisory locks работают. Less efficient.

Transaction. Stateless after each transaction. Гораздо больше throughput.

Каveats transaction pooling:

  • Prepared statements не persistent — нужно PREPARE в каждой transaction (или disable).
  • Session-level settings (SET) — теряются.
  • Advisory locks — careful.
  • LISTEN/NOTIFY — disabled.

Для большинства apps transaction pooling OK. Issues — review code.

Application-level pools

JVM apps использовать HikariCP (Java) — best-in-class.

Python — psycopg2.pool, sqlalchemy.pool.

Layered.

App pool (e.g., 10 conn) ─→ pgbouncer ─→ DB

Локальный pool minimizes round-trip к pooler. Pooler shares physical connections multiple apps.

Связанные темы

FAQ

Это официальная информация?

Нет. Статья основана на документации pgbouncer / HikariCP / Postgres.


Тренируйте Data Engineering — откройте тренажёр с 1500+ вопросами для собесов.