- 死锁产生的原因
数据库死锁的情况是什么?当多个事务处理对多个资源同时访问时,若双方已锁定一部分资源但也都需要对方已锁定的资源时,无法在有限的时间内完全获得所需的资源,就会处于无限的等待状态,从而造成其对资源需求的死锁,导致锁表。
以下情况将导致死锁的发生:
在某一个时刻,线程A在更新 user表的第1行数据,线程B在更新 user表的第2行数据;在下一刻,线程A需要操作user表的第2行数据(获取行锁),线程B需要操作user表的第1行数据,此时两个线程都无法获取锁,形成死锁。
拼接查询死锁的pid语句
select 'select pg_cancel_backend('||pid||');' pid from pg_stat_activity where datname= '' and wait_event_type = 'Lock';
取消执行
select pg_cancel_backend(pid);
终止执行
select pg_terminate_backend(pid);