J'ai une requête batch que j'exécute quotidiennement sur ma base de données. Cependant, il semble rester bloqué à l'état inactif, et j'ai beaucoup de difficulté à déboguer ce qui se passe.
La requête est une agrégation sur une table qui est simultanément insérée, ce qui, je suppose, est en quelque sorte lié au problème. (L'agrégation est basée sur les données des jours précédents, donc les insertions ne devraient pas affecter les résultats.)
Des indices
J'exécute cela dans un script python en utilisant sqlalchemy. Cependant, j'ai défini le niveau de transaction sur l'autocommit, donc je ne pense pas que les choses soient enveloppées dans une transaction. D'un autre côté, je ne vois pas la requête se bloquer lorsque je l'exécute manuellement dans le terminal SQL.
En interrogeant
pg_stat_activity
, la requête vient initialement dans la base de données en tant questate='active'
. Après peut-être 15 secondes, l'état passe à `` inactif '' et en outre, lexact_start
est défini surNULL
. L'indicateur d'attente n'est jamais défini sur true.Avant de comprendre la validation automatique au niveau de la transaction pour sqlalchemy, elle se bloquait plutôt dans l'état
'idle in transaction'
plutôt que'idle'
. Et il se bloque peut-être un peu moins fréquemment depuis ce changement?
Je sens que je ne suis pas équipé pour creuser plus profondément que je ne l'ai fait à ce sujet. Tout commentaire, même en expliquant davantage sur les différents états et les internes postgres pertinents sans donner de réponse définitive, serait grandement apprécié.
COMMIT
n'a été émise pour mettre fin à la transaction. Il semble que votre problème soit ailleurs que dans la base de données ..