我有一个带有两个(只有两个)进程的Postgres数据库。其中之一对TABLE_A进行了大量更新(每秒数百次)。第二个过程也会更新TABLE_A,但每分钟可能只会更新十几条记录。
TABLE_A相对较小(3万条记录),并且使用主键一次进行一次更新。
有时该进程似乎挂起。发生这种情况时,我使用第一个查询here,它通常标识由TABLE_A上的UPDATE引起的单个锁定。
如果我只是坐着等,最终锁将消失,并且两个进程又重新开始工作。通常,这需要60到200秒。
为什么要花很长时间整理自己?
每个进程通常可以在不到一秒钟的时间内完成其工作,我会认为,即使发生死锁,第一个进程也将完成其UPDATE,释放其锁,从而允许第二个进程跟随自己的UPDATE?还是我错过了什么?