Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 987новых вакансий за сутки·91 463вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 238
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python16 417
  • Облачные технологии13 174
  • QA вакансии3 433
  • Backend вакансии2 035
  • Инженер данных1 666
  • Продакт-менеджер1 162

Разработка

  • Android1 816
  • iOS1 666
  • AI вакансии937
  • Fullstack вакансии892
  • Frontend вакансии717
  • Mobile вакансии38

По стеку

  • Go8 561
  • Java6 090
  • Node.js1 889
  • Kotlin1 554
  • .NET1 545
  • Rust1 432
  • PHP640
  • C#562
  • C++498

DevOps и инфраструктура

  • Kubernetes7 303
  • DevOps вакансии5 594
  • Linux-инфраструктура5 291
  • Terraform / IaC4 014
  • CI/CD2 557
  • Мониторинг и Observability1 735
  • SRE548
  • Кибербезопасность398

Аналитика и данные

  • Data Scientist1 033
  • Бизнес-аналитик868
  • Аналитик данных829
  • Системный аналитик134

Другие направления

  • Проджект-менеджер524
  • UI/UX дизайн129
  • Ручное тестирование14

По регионам

  • Вакансии в США44 779
  • Вакансии в Европе21 327
  • Вакансии в Канаде4 450
  • Работа в России3 877

По формату

  • Удалённые вакансии73 902
  • Релокация в США44 794
  • Гибридная работа11 412
  • Офисная работа6 956

По уровню

  • Senior вакансии41 197
  • Middle вакансии20 361
  • Junior вакансии6 638

Сейчас нанимают

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab136 вакансий
  • Celonis45 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме PostgreSQLВсе вопросы
PostgreSQLSeniorПроектирование систем

Что такое connection pooling и зачем он нужен? Чем PgBouncer отличается от Pgpool? Чем session/transaction/statement pooling отличаются?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Connection pooling переиспользует ограниченный набор реальных backend-процессов PostgreSQL. PgBouncer — лёгкий пулер без лишних функций; Pgpool-II добавляет routing и репликацию. Режимы: session сохраняет state сессии, transaction — самый эффективный, statement — почти не используется.

Statement pooling

Server connection возвращается в пул после каждого отдельного SQL-выражения. Запрещает multi-statement транзакции — практически не используется в реальных приложениях.

# /etc/pgbouncer/pgbouncer.ini
[databases]
myapp = host=127.0.0.1 port=5432 dbname=myapp

[pgbouncer]
listen_port = 6432
listen_addr = 0.0.0.0
auth_type = scram-sha-256
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
max_client_conn = 2000
default_pool_size = 25
reserve_pool_size = 5
reserve_pool_timeout = 3
server_reset_query = DISCARD ALL
server_check_query = SELECT 1
log_connections = 0
log_disconnections = 0

Мониторинг состояния пула через псевдо-базу pgbouncer:

-- подключиться: psql -p 6432 pgbouncer
SHOW POOLS;
SHOW STATS;
SHOW CLIENTS;

Зачем нужен connection pooling

Каждое соединение с PostgreSQL — отдельный backend-процесс (~5–10 МБ RSS). При 1000 одновременных клиентах это 5–10 ГБ только на процессы, плюс затраты на context switch. Параметр max_connections ограничивает число backend'ов; превышение возвращает ошибку FATAL: sorry, too many clients already. Пулер принимает тысячи клиентских соединений, но держит к PostgreSQL небольшой набор server connections.

PgBouncer vs Pgpool-II

  • PgBouncer: легковесный однофункциональный пулер (C, ~1 МБ RSS). Умеет только pooling. Конфигурируется через pgbouncer.ini; ключевые параметры: pool_mode, max_client_conn, default_pool_size, server_reset_query. Стандартный выбор для web workload.
  • Pgpool-II: многофункциональный прокси — pooling + load balancing read replicas + online recovery + watchdog HA. Значительно сложнее в настройке; оправдан при нужде в routing между primary/replica или встроенном failover.

Три режима pooling

Session pooling

Server connection закрепляется за клиентом на время всей сессии и возвращается в пул только при disconnect. Сохраняет всё session-local state: temp tables, prepared statements, SET-переменные, advisory locks. Коэффициент мультиплексирования минимален — пул помогает только ограничить пиковое число backend'ов.

Transaction pooling

Server connection возвращается в пул после каждого COMMIT или ROLLBACK. Позволяет держать N server connections для M >> N клиентов. Это наиболее производительный режим, но ломает session-level state: prepared statements, temp tables, SET LOCAL, advisory locks не сохраняются между транзакциями. Требует аудита приложения.

Подводные камни

  • Transaction pooling + prepared statements = intermittent ERROR: prepared statement does not exist. Отключают server-side prepare в драйвере (например, в asyncpg: statement_cache_size=0; в psycopg3: prepare_threshold=None).
  • SET search_path, SET TimeZone и другие сессионные параметры не сохраняются между транзакциями в transaction mode; server_reset_query = DISCARD ALL обнуляет state при возврате соединения в пул.
  • Advisory locks привязаны к server connection, а не к клиенту — в transaction mode lock может «потеряться».
  • Пулер не ускоряет медленные запросы; он лишь защищает от connection storm. Если все 25 server connections заняты долгими запросами, клиенты встают в очередь.
  • Head-of-line blocking: один медленный запрос блокирует весь пул при маленьком default_pool_size.
  • TLS между приложением и PgBouncer и между PgBouncer и PostgreSQL конфигурируются отдельно; часто забывают внутренний сегмент.
  • PgBouncer не поддерживает LISTEN/NOTIFY в transaction mode — соединения для подписки нужно выносить мимо пулера.
  • При выборе default_pool_size ориентируйся на количество CPU PostgreSQL-сервера: эмпирическое правило — 2–4 × vCPU.

Типичные ошибки

  • Считать pooling ускорителем любого запроса.
  • Включать transaction mode без проверки ORM.
  • Путать PgBouncer и Pgpool по назначению.

Что проверяет интервьюер

  • Просит объяснить session/transaction modes.
  • Проверяет prepared statements и temp tables.
  • Уточняет sizing пула.

Как вы знаете этот вопрос?

Проверить себя по теме PostgreSQL →

Источники

  • https://www.pgbouncer.org/features.html
  • https://www.postgresql.org/docs/current/view-pg-stat-activity.html

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

PostgreSQLdatabase-operationssystem-design

Вакансии с этим навыком

PostgreSQL вакансии
  • Python Developer
  • Backend Software Engineer
  • EDA Cloud & Developer Infrastructure Engineer
  • Business Data Analyst - Finance or Banking (Work from Office)
  • Data Engineer (Python)

Частые вопросы на собеседовании

  • Что делает VACUUM, VACUUM FULL, ANALYZE? Чем они отличаются и какой когда применять?
  • Какие уровни изоляции есть и чем отличаются (READ COMMITTED, REPEATABLE READ, SERIALIZABLE)? Какой по умолчанию в Postgres?
  • Что такое PITR и чем pg_dump отличается от base backup + WAL archive?
  • Каковы типы индексов в PostgreSQL (B-tree, Hash, GIN, GiST, BRIN)?