本文共 662 字,大约阅读时间需要 2 分钟。
目前由于系统升级,数据库系统从mssql2012变成开源的pg11.4。新环境出现数据无法入数据库,操作人员无法修改订单,需要查询死锁的点,早处理,最终还是要找到问题的SQL解决。
1.-- 查询ACTIVITY的状态等信息
select T.PID, T.STATE, T.QUERY, T.WAIT_EVENT_TYPE, T.WAIT_EVENT, T.QUERY_START from PG_STAT_ACTIVITY T where T.DATNAME = 'T_STATION';上面查询结果中:pid就是ACTIVITY的唯一标识,state就是活动状态,query就是正在执行的sql语句,query——start就是开始执行的时间。
2.-- 查询死锁的ACTIVITY
select T.PID, T.STATE, T.QUERY, T.WAIT_EVENT_TYPE, T.WAIT_EVENT, T.QUERY_START from PG_STAT_ACTIVITY T where T.DATNAME = 'T_STATION' and T.WAIT_EVENT_TYPE = 'Lock';3.将第二条查询语句的pid字段的数字值记录下来,执行下面的查询语句可以解锁:
-- 通过pid解锁对应的ACTIVITY
select PG_CANCEL_BACKEND('6984');
上面的查询语句,执行了pg_cancel_backend()函数,该函数是取消后台操作,回滚未提交事物的用途。
转载地址:http://axbai.baihongyu.com/