当前位置:   article > 正文

pgsql:检查数据表的死锁和解除死锁的方法_pgsql查询锁表

pgsql查询锁表

问题

在业务执行过程中,可能因为并发多表操作,引起资源抢占导致数据表被死锁,引起整个系统奔溃。

解决方案

1.检测死锁

 --查询指定表的oid
select oid from pg_class where relname='t_mytab'; -- t_mytab为你觉得可能死锁的表名


-- 根据oid查询该表正在被执行的进程 pid
select pid from pg_locks where relation='358009'; -- 358009为上述查询到表t_mytab的oid

2.解除死锁

--如果上面检测查询到了pid结果,则说明该表可能被锁,需要执行释放锁定指令。
select pg_cancel_backend('8954'); -- 8954为pid

3.批量解除

若查询到的Pid记录很多,则你可能需要批量执行。以下语句可以生产批量语句,复制出来执行执行即可。

-- 以下358009为步骤1中查询到的死锁表的oid

select 'select pg_cancel_backend( '''|| pid ||''');' pid from pg_locks where relation='358009'

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/511742
推荐阅读
相关标签
  

闽ICP备14008679号