У меня есть пакетный запрос, который я ежедневно выполняю в своей базе данных. Тем не менее, похоже, что он застрял в режиме ожидания, и мне очень трудно отлаживать происходящее.
Запрос представляет собой агрегацию для таблицы, которая одновременно вставляется, что, я думаю, как-то связано с этой проблемой. (Агрегирование данных за предыдущие дни, поэтому вставки не должны влиять на результаты.)
Улики
Я запускаю это внутри скрипта Python, используя sqlalchemy. Тем не менее, я установил уровень транзакции для автоматической фиксации, так что я не думаю, что что-то запутывается внутри транзакции. С другой стороны, я не вижу зависания запроса, когда запускаю его вручную в терминале sql.
При запросе
pg_stat_activity
запрос изначально поступает в базу данных какstate='active'
. Примерно через 15 секунд состояние меняется на «режим ожидания» и дополнительноxact_start
устанавливается наNULL
. Флаг ожидания никогда не устанавливается в true.Прежде чем я понял, AutoCommit уровня транзакций для SQLAlchemy, было бы вместо этого повесить в состоянии ,
'idle in transaction'
а не'idle'
. И это может зависать немного реже после внесения этого изменения?
Я чувствую, что я не в состоянии копать глубже, чем я на этом. Будем весьма благодарны за любые отзывы, даже более подробно объясняющие различные состояния и соответствующие внутренние компоненты postgres, но не дающие однозначного ответа.
COMMIT
для завершения транзакции не было выдано ни одного запроса . Похоже, ваша проблема может быть не в БД, а в другом месте