我试图弄清楚为什么查询要花这么长时间才能运行。当我在查询上运行EXPLAIN时,它没有返回(在等待5+分钟之后)。查询为
SELECT *
FROM Foo JOIN Bar USING (FileNum, LineNum)元组(FileNum, LineNum)是这两个表的主键。此外,(FileNum, LineNum)是Bar中引用Foo的外键。
我遇到了数据库的性能问题,但这似乎是一个新现象。
我已经在数据库上运行了ANALYZE,从那时起就没有做过任何更改。
有人知道为什么查询规划器不返回结果吗?
发布于 2016-06-10 00:28:36
最简单的解释是,另一个会话获取了查询所涉及的某个表上的AccessExclusive锁,并且不会释放它。
例如,如果另一个会话在事务中执行ALTER TABLE但从未提交,就会发生这种情况。
您可以尝试在https://wiki.postgresql.org/wiki/Lock_Monitoring中执行查询,以检查是否有这样的阻塞事务正在进行,然后可能使用pg_cancel_backend()或pg_terminate_backend()终止它。
请注意,如果阻塞事务是已准备好的事务:
pg_stat_activity中没有相应的会话,因此任何通过pid联接的查询都将丢失它。准备好的事务可以通过pg_prepared_xacts查看。
https://stackoverflow.com/questions/37731216
复制相似问题