Выбор ответа Senior NoSQL и выбор хранилища обновлено

Зачем пулер, если в приложении уже есть пул

Вопрос

У сервиса 40 подов, в каждом пул на 20 соединений к PostgreSQL. Почему при росте числа подов советуют поставить PgBouncer или другой внешний пулер?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Каждое соединение это процесс с памятью: 800 простаивающих вредят. Модель PostgreSQL процесс на соединение: каждое стоит памяти (несколько мегабайт и больше, плюс кеши каталога), а при тысячах соединений растут накладные расходы на снимки и блокировки.

Варианты ответа

  1. PostgreSQL принимает не больше 100 соединений, и это нельзя изменить
  2. Каждое соединение это процесс с памятью: 800 простаивающих вредятправильный ответ
  3. Пулер кеширует результаты частых запросов и разгружает базу
  4. Без пулера PostgreSQL не умеет держать TLS-соединения с подами

Разбор

Модель PostgreSQL процесс на соединение: каждое стоит памяти (несколько мегабайт и больше, плюс кеши каталога), а при тысячах соединений растут накладные расходы на снимки и блокировки. Прикладной пул в каждом поде ограничивает соединения одного пода, но не общее число: 40 × 20 = 800. Внешний пулер мультиплексирует их и отдаёт в базу, например, 50 реальных соединений в режиме transaction. max_connections (по умолчанию 100) поменять можно, но проблему это не решает. Результатов запросов пулер не кеширует, а TLS PostgreSQL умеет сам.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.