Выбор ответа Senior JDBC и транзакции обновлено

Размер пула соединений

Вопрос

Сервис на 8 ядрах, база PostgreSQL на 8 ядрах с SSD. Под нагрузкой не хватает соединений, и разработчик предлагает поднять maximumPoolSize с 10 до 200. Что ответите?

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

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

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

Коротко

Правильный ответ: Скорее станет хуже: база не потянет 200 запросов разом, ищите, кто держит. Активно выполнять запросы база может примерно по числу ядер плюс ожидание диска.

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

  1. Скорее станет хуже: база не потянет 200 запросов разом, ищите, кто держитправильный ответ
  2. Правильно: чем больше соединений в пуле, тем выше пропускная способность сервиса
  3. Нужно ещё больше, по соединению на каждый поток веб-сервера, иначе будут очереди
  4. Размер пула на производительность не влияет, только на память JVM и базы

Разбор

Активно выполнять запросы база может примерно по числу ядер плюс ожидание диска. Сотни одновременных запросов увеличат конкуренцию за CPU, блокировки и память на соединение (в PostgreSQL каждое соединение это процесс). Рекомендации HikariCP говорят о небольших пулах. Нехватка соединений обычно означает, что они долго удерживаются: длинные транзакции, внешние вызовы внутри, медленные запросы, N+1. Это и надо искать.

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

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