【发布时间】:2020-03-19 20:56:49
【问题描述】:
最近我们开始在日志中发现很多死锁错误。 (Postgres 服务器 9.6.5)
我们的表由两列组成,一列是自增主键,另一列是 json 对象。 json 对象的两个属性被定义为 unique 。 现在在日志中,我们不断收到错误,表明不同行上的两个简单插入查询相互阻塞。
============
process 65325 detected deadlock while waiting for ShareLock on transaction 2934224126 after 1000.050 ms
DETAIL: Process holding the lock: 35530. Wait queue: .
CONTEXT: while inserting index tuple (128,10) in relation "A"
STATEMENT: INSERT INTO A AS t (info) VALUES('{"x":"y",....)
ERROR: deadlock detected
DETAIL: Process 65325 waits for ShareLock on transaction 2934224126; blocked by process 35530.
Process 35530 waits for ShareLock on transaction 2934224125; blocked by process 65325.
Process 65325: INSERT INTO A AS t (info) VALUES({"x":"y",....)
Process 35530: INSERT INTO A AS t (info) VALUES({"x":"z",....)
=====================
所以基本上两个不同的行处于死锁状态。 对于这种死锁可能发生的情况有什么建议吗?
【问题讨论】:
-
在您的过时版本 9.6.5 和当前版本 9.6.16 之间有几个与“虚假死锁”相关的错误修正。 why-upgrade.depesz.com/…
标签: postgresql deadlock