postgresql查询无法完成

postgresql查询无法完成,第1张

概述在postgresl 9.0上我们有一个SQL查询: SELECT count(*) FROM lane WHERE not exists (SELECT 1 FROM id_map WHERE id_map.new_id=lane.lane_id and id_map.column_name='lane_id' and id_map.table_nam 在postgresl 9.0上我们有一个SQL查询:

SELECT count(*) FROM lane WHERE not exists     (SELECT 1 FROM ID_map     WHERE ID_map.new_ID=lane.lane_ID      and ID_map.column_name='lane_ID'     and ID_map.table_name='lane') and lane.lane_ID is not null;

这通常需要大约1.5秒才能完成.
这是解释计划:http://explain.depesz.com/s/axNN

有时虽然此查询挂起但无法完成.它甚至可以运行11个小时但没有成功.
然后它占用了100%的cpu.

此查询所采用的唯一锁定是“AccessShareLock”,它们都被授予.

SELECT a.datname,c.relname,l.transactionID,l.mode,l.granted,a.usename,a.current_query,a.query_start,age(Now(),a.query_start) AS "age",a.procpID     FROM  pg_stat_activity a     JOIN pg_locks         l ON l.pID = a.procpID     JOIN pg_class         c ON c.oID = l.relation    ORDER BY a.query_start;

该查询作为使用连接池连接到数据库的java进程的一部分运行,并执行此格式的顺序类似的选择查询:

SELECT count(*) FROM {}  WHERE not exists (SELECT 1 FROM ID_map WHERE ID_map.new_ID={}.{} and ID_map.column_name='{}' and ID_map.table_name='{}') and {}.{} is not null

没有更新或删除与此过程并行发生,所以我不认为吸尘可能是这里的问题.
在运行整个过程之前(因此在运行此类6个查询之前),运行了对所有表的分析.

postgres日志不显示长时间运行的查询的任何条目,因为它们永远不会完成,因此永远不会被记录.

知道什么可能导致这种行为以及如何防止它发生?

没有分析的解释计划:

Aggregate  (cost=874337.91..874337.92 rows=1 wIDth=0)  ->  nested Loop Anti Join  (cost=0.00..870424.70 rows=1565283 wIDth=0)        Join Filter: (ID_map.new_ID = lane.lane_ID)        ->  Seq Scan on lane  (cost=0.00..30281.84 rows=1565284 wIDth=8)              Filter: (lane_ID IS NOT NulL)        ->  Materialize  (cost=0.00..816663.60 rows=1 wIDth=8)              ->  Seq Scan on ID_map  (cost=0.00..816663.60 rows=1 wIDth=8)                    Filter: (((column_name)::text = 'lane_ID'::text) AND ((table_name)::text = 'lane'::text))
解决方法
VACUUM ANALYZE VERBOSE;

刷新统计数据应该有助于db选择最佳计划 – 而不是嵌套循环,我认为这需要100%的cpu

总结

以上是内存溢出为你收集整理的postgresql查询无法完成全部内容,希望文章能够帮你解决postgresql查询无法完成所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1161445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存