Настройка пула соединений
Вопрос
Как вы настраиваете пул соединений и что делаете, когда соединений не хватает?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Небольшой пул, ориентир на возможности БД, а не потоков приложения
connectionTimeout, maxLifetime меньше таймаутов сети и БД
leakDetectionThreshold для поиска утечек
Метрики пула: active, idle, pending
Причины нехватки: долгие транзакции, внешние вызовы в транзакции, медленные запросы
Суммарный размер пулов всех инстансов против max_connections
Что могут спросить следом
- Зачем нужен PgBouncer, если есть HikariCP?
- Как виртуальные потоки влияют на пул соединений?
Разбор
Стартую с небольшого пула, десяток соединений, и проверяю нагрузкой: база не выполняет параллельно больше запросов, чем у неё ядер и дисков, а лишние соединения только конкурируют. Считаю суммарно: размер пула на число инстансов не должен превышать max_connections базы, при многих инстансах ставлю PgBouncer. Задаю connectionTimeout, чтобы запрос падал быстро, а не висел, maxLifetime меньше таймаутов балансировщиков и базы, включаю leakDetectionThreshold. Слежу за метриками: активные, свободные, ожидающие соединения. Если не хватает, сначала ищу, почему соединения долго заняты: HTTP-вызов внутри транзакции, медленный запрос, N+1, забытое закрытие. С виртуальными потоками это особенно важно: тысячи потоков упрутся в тот же пул.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.