Выбор ответа Senior SQLAlchemy 2.0 обновлено

Исчерпание пула соединений

Вопрос

Под нагрузкой сервис ловит QueuePool limit of size 5 overflow 10 reached, connection timed out. Что наиболее вероятно?

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

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

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

Коротко

Правильный ответ: Сессии не закрываются или долго держат транзакцию. Пул выдаёт не больше poolsize + maxoverflow соединений.

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

  1. База данных выключена или недоступна по сети
  2. Пул нужно увеличить до 10 000 соединений
  3. Сессии не закрываются или долго держат транзакциюправильный ответ
  4. Включён echo=True, и логирование SQL тормозит выдачу соединений

Разбор

Пул выдаёт не больше pool_size + max_overflow соединений. Если сессии не возвращают соединение (не закрыты, висит транзакция, в транзакции идёт медленный внешний вызов), остальные запросы ждут и падают по таймауту. Лечат закрытием сессий через контекстный менеджер или зависимость, короткими транзакциями без внешних вызовов внутри. Огромный пул лишь перенесёт проблему в PostgreSQL с его max_connections.

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

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

Термины по теме