我有一个每天在数据库上运行的批处理查询。但是,它似乎陷入了空闲状态,并且调试发生的事情非常困难。
该查询是同时插入的表上的聚合,我猜这与问题有关。(聚合是基于前几天的数据,因此插入不会影响结果。)
线索
我正在使用sqlalchemy在python脚本中运行它。但是,我已将事务级别设置为自动提交,因此我认为事情不会卷入事务中。另一方面,在sql终端中手动运行查询时,我看不到查询挂起。
通过查询
pg_stat_activity
,查询最初以形式进入数据库state='active'
。大约15秒钟后,状态更改为“空闲”,此外,xact_start
设置为NULL
。等待标志永远不会设置为true。在弄清楚sqlalchemy的事务级别自动提交之前,它会挂在状态
'idle in transaction'
而不是'idle'
。自进行更改以来,它挂起的频率可能会稍微降低一些?
我觉得我没有能力对此进行更深入的研究。任何反馈,甚至在不给出明确答案的情况下,甚至解释更多有关不同状态和相关postgres内部的信息,都将不胜感激。
是的,我认为您是对的。问题在于Python如何处理查询,而不是数据库问题。
—
Kurt Spindler
COMMIT
发出任何查询来结束事务。这听起来像你的问题可能会比其他地方分贝..