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

  • 相关阅读:
    cygwin 下配置ssh
    使用MarsEdit写博客
    bash no job control in this shell
    安装devtoolset-2:因由安装gcc 4.8而引起
    AFNetworking Property with 'retain (or strong)' attribute must be of object type
    从xib 创建 collectionViewCell
    CocoaPods 安装
    个人理解的 Https 通信流程
    cellforrowatindexpath 不执行 的原因
    do{} while(0) 的意义和用法
  • 原文地址:https://www.cnblogs.com/hoojjack/p/10250742.html
Copyright © 2011-2022 走看看