沙滩星空的博客沙滩星空的博客

postgres查看被事务锁锁死的SQL语句

背景

为避免使用 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;
未经允许不得转载:沙滩星空的博客 » postgres查看被事务锁锁死的SQL语句

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址