Исчерпание пула соединений
Вопрос
Под нагрузкой сервис ловит QueuePool limit of size 5 overflow 10 reached, connection timed out. Что наиболее вероятно?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- База данных выключена или недоступна по сети
- Пул нужно увеличить до 10 000 соединений
- Сессии не закрываются или долго держат транзакциюправильный ответ
- Включён
echo=True, и логирование SQL тормозит выдачу соединений
Разбор
Пул выдаёт не больше pool_size + max_overflow соединений. Если сессии не возвращают соединение (не закрыты, висит транзакция, в транзакции идёт медленный внешний вызов), остальные запросы ждут и падают по таймауту. Лечат закрытием сессий через контекстный менеджер или зависимость, короткими транзакциями без внешних вызовов внутри. Огромный пул лишь перенесёт проблему в PostgreSQL с его max_connections.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Как не пропустить N+1 в SQLAlchemy
Следующий вопрос
Код-ревью async-сервиса на SQLAlchemy