#django #postgresql #django-rest-framework #celery
#django #postgresql #django-rest-framework #сельдерей
Вопрос:
Я запускаю периодическую задачу с использованием celery в приложении django-rest, которое извлекает данные из большой базы данных Postgres с несколькими таблицами, задача запускается хорошо и извлекает некоторые данные около 50 минут, а затем завершается с ошибкой
client_idle_timeout
server closed the connection unexpectedly, This probably means the server terminated abnormally before or while processing the request.
В чем может быть проблема, вызывающая это, и как я могу это исправить?
Комментарии:
1. можете ли вы поделиться кодом?
2. Это 50-минутная задача и извлечение данных… не хватает памяти? postgres отключает ваше соединение, потому что вы слишком долго держали его открытым во время обработки?
3. Я смог решить проблему, запрашивая небольшие объемы данных постепенно, следовательно, предотвращая тайм-аут. Спасибо @paraschauhan и Andrew
Ответ №1:
Скорее всего, это означает, что ваш PostgreSQL имеет ограничение на то, как долго может выполняться транзакция (бездействие в транзакции) или как долго может длиться сеанс (тайм-аут сеанса).
Вероятно, это происходит из-за типичного неправильного способа работы с базами данных (я видел, как это делали даже старшие разработчики) — процесс создает сеанс базы данных, а затем начинает выполнять некоторую бизнес-логику, для завершения которой может потребоваться много времени, в то время как данные БД были либо частично обновлены, либо вставлены. Код, написанный таким образом, обречен на сбой из-за тайм-аутов, установленных PostgreSQL.