zoukankan      html  css  js  c++  java
  • Postgresql 查看锁的过程

    一、查看sql语句是否发生死锁

    1.查看数据库的进程。SELECT * FROM pg_stat_activity WHERE datname='死锁的数据库ID ';
    检索出来的字段中,【wating 】字段,数据为t的那条,就是死锁的进程,找到对应的【procpid 】列的值。

    例如:SELECT  procpid  FROM pg_stat_activity WHERE datname='数据库ID' and waiting ='t';

    2.杀掉进程。

    kill有两种方式,第一种是:
    SELECT pg_cancel_backend(PID);
    这种方式只能kill select查询,对update、delete 及DML不生效)

    第二种是:
    SELECT pg_terminate_backend(PID);
    这种可以kill掉各种操作(select、update、delete、drop等)操作

    具体查询语句:

    --查询阻塞的sql( 死锁了,没有执行通过的sql )
    select * from pg_stat_activity aa,
    (
    select a.locktype,a.database,a.pid,a.mode,a.relation,b.relname from pg_locks a join pg_class b on a.relation=b.oid
     where upper(b.relname)='xxx'
    ) bb
    where aa.pid=bb.pid
     and aa.waiting='t'
     
    --释放 死锁的sql
    select pg_cancel_backend(上面查询到的pid)
    --查询是否锁表了
    select oid from pg_class where relname='可能锁表了的表' --oid是每个表隐藏的id
    select pid from pg_locks where relation='上面查出的oid'
    --如果查询到了结果 则释放锁定
    select pg_cancel_backend(上面查到的pid)

    测试PostgreSQL行级锁

    Reference:

    [1] https://blog.csdn.net/liuxiumeitanjie/article/details/38816871

    [2] https://blog.csdn.net/czp11210/article/details/51320700

    [3] https://blog.csdn.net/liyazhen2011/article/details/83379225

  • 相关阅读:
    Learn Orleans 04
    Learn Orleans 03
    Learn Orleans 02
    Learn Orleans 01
    Python 导入 Excel 到数据库
    visio 2016/2019 时序图/序列图,修改消息的实线/虚线 箭头问题 返回消息状态
    steeltoe简单使用
    AOP in .NET
    centos 8 docker安装以及兼容性问题处理
    ef core SoftDelete Multi-tenancy 软删除、多租户实现 Global Query Filters
  • 原文地址:https://www.cnblogs.com/hoojjack/p/10250742.html
Copyright © 2011-2022 走看看