Eu tenho uma consulta em lote que estou executando diariamente no meu banco de dados. No entanto, parece que ele fica parado no estado inativo e estou tendo muita dificuldade em depurar o que está acontecendo.
A consulta é uma agregação em uma tabela que está sendo inserida simultaneamente, o que eu acho que está de alguma forma relacionado ao problema. (A agregação está nos dados dos dias anteriores, portanto, as inserções não devem afetar os resultados.)
Pistas
Estou executando isso dentro de um script python usando sqlalchemy. No entanto, eu configurei o nível de transação para confirmação automática, portanto, não acho que as coisas estejam envolvendo dentro de uma transação. Por outro lado, não vejo a consulta travar quando a executo manualmente no terminal sql.
Ao consultar
pg_stat_activity
, a consulta entra inicialmente no banco de dados comostate='active'
. Após talvez 15 segundos, o estado muda para 'inativo' e, adicionalmente, oxact_start
está definido comoNULL
. O sinalizador de espera nunca é definido como verdadeiro.Antes de descobrir o autocommit no nível da transação para sqlalchemy, ele seria interrompido no estado,
'idle in transaction'
e não'idle'
. E possivelmente trava um pouco menos frequentemente desde que fez essa alteração?
Sinto que não estou preparada para me aprofundar mais do que nisto. Qualquer feedback, mesmo explicando mais sobre diferentes estados e internos relevantes do postgres sem dar uma resposta definitiva, seria muito apreciado.
COMMIT
foi emitida para finalizar a transação. Parece que seu problema pode estar em outro lugar do que a db ..