Получить доступ

Зачем нужен пул соединений и почему его размер обычно невелик?

MiddleJDBC
Ещё спрашивают так:
  • Как выбрать размер HikariCP?
Коротко

Соединение дорого создавать (TCP, TLS, аутентификация, процесс на сервере), а лишние активные соединения не ускоряют базу: её параллелизм ограничен ядрами и дисками.

  • Отправная точка: ядра базы × 2 + диски
  • Сумма пулов всех экземпляров не должна превышать возможности базы — иначе PgBouncer
  • Ожидание в пуле видно и управляемо; очередь внутри базы — нет

А ещё Не держать соединение во время внешних вызовов

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Открытие соединения включает сетевое рукопожатие, аутентификацию и выделение ресурсов на стороне СУБД, поэтому создавать его на каждый запрос недопустимо. Но и раздувать пул бессмысленно: параллелизм базы ограничен процессорами и вводом-выводом, а лишние активные соединения добавляют переключений контекста и конкуренции за блокировки — пропускная способность падает, а задержки растут. Практический ориентир для OLTP — десятки соединений, а не сотни; при этом суммарно по всем инстансам приложения пул не должен превышать лимит базы. Занятый пул при низкой загрузке CPU приложения — верный признак, что узкое место именно здесь.

Что хотят услышать

  • Цена соединения и зачем пул.
  • Почему пул должен быть маленьким.
  • Сумма пулов экземпляров и прокси-пулер.

Частые ошибки

  • Наращивать пул при росте задержек — обычно становится хуже.
  • Не учитывать, что пул умножается на число инстансов приложения.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Установление соединения дорого (сеть, аутентификация, процесс на стороне СУБД), а больше соединений, чем база способна обслуживать параллельно, только увеличивают конкуренцию
  • ✗Пул нужен для кэширования результатов запросов
  • ✗Размер пула должен совпадать с числом одновременных пользователей приложения
  • ✗Пул нужен только для распределённых транзакций

Что спросят дальше

  • Что произойдёт при исчерпании пула?
  • Почему долгие транзакции особенно вредны для пула?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем