相关疑难解决方法(0)

如何检测Postgres中持有锁的查询?

我想不断跟踪postgres中的相互锁定.

我遇到了Locks Monitoring文章并尝试运行以下查询:

SELECT bl.pid     AS blocked_pid,
     a.usename  AS blocked_user,
     kl.pid     AS blocking_pid,
     ka.usename AS blocking_user,
     a.query    AS blocked_statement
FROM  pg_catalog.pg_locks         bl
 JOIN pg_catalog.pg_stat_activity a  ON a.pid = bl.pid
 JOIN pg_catalog.pg_locks         kl ON kl.transactionid = bl.transactionid AND kl.pid != bl.pid
 JOIN pg_catalog.pg_stat_activity ka ON ka.pid = kl.pid
WHERE NOT bl.granted;
Run Code Online (Sandbox Code Playgroud)

不幸的是,它永远不会返回非空结果集.如果我将给定查询简化为以下形式:

SELECT bl.pid     AS blocked_pid,
     a.usename  AS blocked_user,
     a.query    AS blocked_statement
FROM  pg_catalog.pg_locks         bl
 JOIN pg_catalog.pg_stat_activity a  ON a.pid = bl.pid
WHERE NOT bl.granted;
Run Code Online (Sandbox Code Playgroud)

然后它返回等待获取锁的查询.但我无法改变它,以便它可以返回阻止和阻止查询.

有任何想法吗?

sql postgresql locking

40
推荐指数
8
解决办法
6万
查看次数

标签 统计

locking ×1

postgresql ×1

sql ×1