当前位置: 首页 > article >正文

PostgreSQL 锁判断

我们在使用 PostgreSQL 的时候经常会遇到有关锁的信息。那么如何判断是否有死锁或者锁等待呢?
WITH lock_pid AS (
SELECT DISTINCT pid
FROM pg_locks
WHERE pid <> pg_backend_pid() )

SELECT psa.*
FROM pg_stat_activity psa
INNER JOIN lock_pid lp ON psa.pid = lp.pid;

SELECT l.locktype,
       l.database,
       l.relation,
       l.page,
       l.tuple,
       l.virtualxid,
       l.transactionid,
       l.classid,
       l.objid,
       l.objsubid,
       l.pid AS blocking_pid,
       l.mode AS lock_mode,
       l.granted,
       s1.datname AS database_name,
       s1.usename AS blocking_user,
       s1.query AS blocking_query
FROM pg_locks l
INNER JOIN pg_stat_activity s1 ON l.pid = s1.pid
INNER JOIN pg_locks l2 ON l.database = l2.database
    AND l.relation = l2.relation
    AND l.page = l2.page
    AND l.tuple = l2.tuple
    AND l.pid <> l2.pid
INNER JOIN pg_stat_activity s2 ON l2.pid = s2.pid;

        l.locktype, --可锁的对象的类型
        l.database, --锁目标存在的数据库的 OID
        l.relation, --作为锁目标的关系的 OID
        l.page, --作为锁目标的页在关系中的页号
        l.tuple, --作为锁目标的元组在页中的元组号
        l.virtualxid, --作为锁目标的事务虚拟 ID
        l.transactionid, --作为锁目标的事务 ID
        l.classid, --包含锁目标的系统目录的 OID
        l.objid, --锁目标在它的系统目录中的OID
        l.objsubid, --锁的目标列号
        l.pid AS blocking_pid, --保持这个锁或者正在等待这个锁的服务器进程的 PID
        l.mode AS lock_mode, --此进程已持有或者希望持有的锁模式
        l.granted --锁已授予则为真否则为假


http://www.kler.cn/a/392514.html

相关文章:

  • 事件驱动编程与异步编程:原理、对比及实践案例
  • LeetCode:257. 二叉树的所有路径
  • 计算机图形学知识点汇总
  • 圣诞节文化交流会在洛杉矶成功举办
  • Unity 6 中的新增功能
  • EasyGBS国标GB28181公网平台P2P远程访问故障诊断:云端服务端排查指南
  • 继承和多态(上)
  • Kafka 之自定义消息拦截器【Kafka 拦截器】
  • 牛客小白月赛104-D小红开锁-模拟
  • Unity常见问题合集(一)
  • workerman的安装与使用
  • TCP/IP协议,TCP和UDP区别
  • L10.【LeetCode笔记】回文链表
  • QObject中QThreadData里面的postEventList和QObjectPrivate里面的postedEvents
  • caozha-comment(原生PHP评论系统)
  • 根据模型数据 处理流式数据 生成AI对话
  • [运维][Nginx]Nginx学习(1/5)--Nginx基础
  • QTableWidget的简单使用
  • Swift 开发教程系列 - 第11章:内存管理和 ARC(Automatic Reference Counting)
  • Redhat8.6安装MySQL8.0.31
  • 在启动 Spring Boot 项目时,报找不到 slf4j 的错误
  • openresty入门教程:access_by_lua_block
  • windows环境下手工创建oracle数据库监听
  • kafka生产消费问题
  • ffmpeg内存模型
  • 【go从零单排】go中的range的用法