awesome-everything EN
↑ Обратно к восхождению

Базы данных

Connection pooling: тест с выбором ответа

Суть Тест с выбором на синтез по всему юниту: процессная модель, режимы PgBouncer, математика размера, exhaustion против idle-in-transaction и выбор пулера.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов поперёк всего юнита. Каждый отражает решение, которое ты принимаешь в 02:14 под звон пейджера — не определение для заучивания, а компромисс, который надо взвесить, когда пул пуст, а cl_waiting растёт.

Цель

Убедись, что связываешь процессную модель Postgres, режимы PgBouncer, математику размера, hold-time как корневую причину exhaustion и выбор пулера — тот синтез, к которому вели семь уроков.

Викторина

Команда держит 40 воркеров приложения, у каждого client pool max 20, против Postgres с max_connections = 100. Подключаются напрямую (без PgBouncer) и ловят 'FATAL: sorry, too many clients already'. Каков настоящий фикс?

Викторина

Приложение на PgBouncer session mode переключается в transaction mode ради мультиплексирования. `SET search_path = 'app, public'`, выданный один раз при подключении, тихо перестаёт действовать. Почему и каков правильный фикс?

Викторина

16-ядерный Postgres (NVMe, рабочий набор в RAM) за PgBouncer. Инженер ставит default_pool_size = 200, чтобы 'покрыть пиковую конкурентность', и p99 ухудшается. Каков оптимальный по throughput pool_size и почему?

Викторина

В 02:14 PgBouncer показывает pool = 24, cl_waiting = 180, приложение отдаёт 503. pg_stat_activity показывает 19 backend в состоянии 'idle in transaction' с максимальным возрастом транзакции 8 минут. Утром пул был размечен верно. Что происходит?

Викторина

Команда на PgBouncer 1.20 отключила prepared statements драйвера, чтобы избежать ошибок 'prepared statement does not exist' в transaction mode, потеряв ~20% throughput. В 2026 они хотят И мультиплексирование transaction mode, И prepared statements. Что это разблокирует?

Викторина

Multi-tenant B2B SaaS: 10 000 баз-арендаторов, ~50 одновременных пользователей в каждой, serverless-функции с cold-start под нагрузкой. PgBouncer на одной ноде упирает одно ядро CPU, а cold-старты вызывают connection storm. Какая архитектура подходит?

Итог

Сквозная линия юнита — одна цепочка: Postgres форкает тяжёлый процесс на соединение, поэтому число backend должно держаться около (cores × 2) — что и обеспечивает пулер, мультиплексируя тысячи дешёвых клиентских соединений в transaction mode. Transaction mode стоит тебе session-state, заданного при подключении (SET, LISTEN, SQL PREPARE, session advisory locks), у каждого есть точная безопасная замена, а PgBouncer 1.21+ наконец делает prepared statements совместимыми. Когда пул пустеет, причина почти всегда hold-time — медленный запрос или внешний вызов внутри транзакции — а не размер; idle_in_transaction_session_timeout — бесплатная страховка. Тянись за пределы PgBouncer лишь когда измерил его однопоточный потолок или столкнулся с serverless/multi-tenant масштабом.

Продолжить восхождение ↑Connection pooling: тест на припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.