【发布时间】:2021-02-27 16:29:25
【问题描述】:
我一直在尝试在我们系统的另一部分调试慢查询,并看到此查询处于活动状态:
SELECT * FROM xdmdf.hematoma AS "zzz4" WHERE (0 = 1)
它显然已经活跃了 8 小时以上。使用WHERE 子句,从逻辑上讲,该查询应该返回零行。为什么 SQL 引擎还要费心去评估它?像这样的查询对任何事情都有用吗?如果有,它会是什么?
(xdmdf.hematoma 是一个视图,我预计 SELECT * 在非锁定条件下需要大约 30 分钟。)
此声明:
explain select 1 from xdmdf.hematoma limit 1
(no analyze) 现在已经运行了大约 10 分钟。
【问题讨论】:
-
hematoma是视图吗? -
为什么是的,是的。
-
请edit您的问题并添加一个使用
where false的查询执行计划和另一个没有该条件的执行计划。请将它们添加为formatted text 并确保保留计划的缩进。粘贴文本,然后将```放在计划前一行和计划后一行。 -
您是否仔细检查过
pg_stat_activity中的state是active,而不是idle? -
当查询处于“活动状态”时,您可以通过查看
pg_stat_activity中的wait_event和wait_event_type来了解查询是否正在等待锁定
标签: sql postgresql database-deadlocks