背景
为避免使用 Update SQL语句误操作,造成生产事故。 使用 DBeaver 数据库客户端时,更改 连接设置 如下:常规 -> 连接类型 设置为 生产。 (默认为 开发 )
设置连接类型为 生产 后,变更如下:
- 手动执行的
每一条SQL语句都会加入待处理的事务中 - 左上角方框中的
数字,代表待处理事务的SQL语句数。若没有待处理的事务,则方框显示None。 - 点击左上角的
提交按钮,才会提交事务执行。 提交前,若发现操作有误,可及时回滚事务。
问题
执行了几个SQL语句,忘记点击 提交 按钮,被 事务锁 锁住。后面有的SQL语句执行时因此卡死。
排查被 事务锁 锁住的SQL语句如下所示:
SELECT locker.pid,
'SELECT pg_terminate_backend('||locker.pid||');' kill_pid,
pc.relname,
locker.mode,
locker_act.application_name,
least(query_start,xact_start) start_time,
CASE
WHEN locker.granted='f' THEN
'wait_lock'
WHEN locker.granted='t' THEN
'get_lock'
END lock_satus,current_timestamp - least(query_start,xact_start) AS runtime,
locker_act.query
FROM pg_locks locker,pg_stat_activity locker_act, pg_class pc
WHERE locker.pid=locker_act.pid
AND NOT locker.pid=pg_backend_pid()
AND application_name<>'pg_statsinfod'
AND locker.relation = pc.oid
AND pc.reltype<>0 --and pc.relname='t'
ORDER BY runtime desc;
沙滩星空的博客