当前位置: 首页 > 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

相关文章:

  • 微服务架构面试内容整理-API 网关-Gateway
  • JQuery封装的ajax
  • MTSET可溶于DMSO、DMF、THF等有机溶剂,并在水中有轻微的溶解性,91774-25-3
  • 分享一个傻瓜式一键启动的加速器
  • Flink CDC(SQL Client)连接 MySQL 数据库教程
  • 使用 Vue 配合豆包MarsCode 实现“小恐龙酷跑“小游戏
  • 继承和多态(上)
  • 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的用法