Что такое прогрев пула коннектов и зачем он нужен?
Что проверяют
Понимает ли кандидат, из чего складывается стоимость соединения и почему её видит пользователь. Ответ уровня «так быстрее» не проходит: ждут разбора, что именно происходит при открытии подключения и почему первые минуты после выката хуже остальных.
Для Python вопрос ещё и про модель процессов: пул живёт внутри процесса, а процессов у приложения обычно много.
Как отвечать
Объясните цену: установление соединения, рукопожатие шифрования, аутентификация, а в PostgreSQL ещё и запуск отдельного серверного процесса под каждое подключение. На фоне короткого запроса это заметная величина, и платится она именно тогда, когда трафик пришёл.
Прогрев это открытие минимального набора соединений заранее, при старте приложения, чтобы первые запросы не создавали их одновременно. В психопг и асинхронных драйверах это минимальный размер пула, в популярных ORM размер пула вместе с проверкой живости перед выдачей.
Обязательно скажите про арифметику: суммарное число подключений это размер пула, умноженный на количество воркеров и реплик, и упирается оно в лимит сервера базы. Если между приложением и базой стоит внешний пулер в транзакционном режиме, прогрев на стороне приложения почти ничего не решает.
Где спотыкаются
Создают пул на импорте модуля, до форка воркеров. Дочерние процессы наследуют один и тот же сокет, ответы перемешиваются или соединение рвётся с непонятной ошибкой. Пул открывается в каждом процессе после форка, в обработчике старта приложения.
Прогревают, но не поддерживают. Простаивающее подключение закрывает файрвол, пулер или сама база по таймауту простоя, и первый запрос после затишья падает на мёртвом сокете. Лечится проверкой перед выдачей и ограничением времени жизни соединения.
Считают прогрев бесплатным. Открытые подключения занимают память и слоты на сервере постоянно, а одновременный старт всех реплик сам по себе создаёт всплеск. Прогревают до минимального рабочего размера, остальное пул добирает под нагрузкой.