2

我有一个被锁定的查询。因此,我的 Web 应用程序被锁定,我真的不明白为什么。

看着 PgAdmin 我有这个:

活动

如果我理解正确,橙色查询已被上面的查询(处于“空闲事务”状态)阻止。

这是否意味着“事务中的空闲”事务未提交?是不是因为没有提交另一个事务被锁定?

如果我提交“idle in transaction”事务,它会解锁锁定的事务吗?

老实说,我真的不明白我应该如何解释这一点。你能帮助我吗 ?

4

2 回答 2

2

你的假设是正确的。“事务中的空闲”表示会话(在本例中为 PID=16686)启动了事务并在goodscontract表上持有一些锁。

请注意,您看到的 PID=16686 的选择很可能不是阻止更新的语句(写入者不会被 Postgres 中的读取者阻止)。很可能 PID=16686 之前运行了一条不同的语句来获取锁(或者选择包含一个for update子句 - 因为您的屏幕截图没有显示完整的语句,这是不可能的)。

一般来说,强烈建议尽快结束事务(使用commitor ) - 其中包括只执行s 的rollback只读事务。select

于 2013-11-02T14:15:23.380 回答
0

有两件事需要在 postgresql.conf 上更新

idle_transaction_timeout

共享内存

将解决问题。

于 2021-10-29T11:38:49.253 回答