PostgreSQL 锁监控

PG>9.2

postgres=# SELECT blocked_locks.pid AS blocked_pid,
postgres-# blocked_activity.usename AS blocked_user,
postgres-# blocking_locks.pid AS blocking_pid,
postgres-# blocking_activity.usename AS blocking_user,
postgres-# blocked_activity.query AS blocked_statement,
postgres-# blocking_activity.query AS current_statement_in_blocking_process
postgres-# FROM pg_catalog.pg_locks blocked_locks
postgres-# JOIN pg_catalog.pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid
postgres-# JOIN pg_catalog.pg_locks blocking_locks
postgres-# ON blocking_locks.locktype = blocked_locks.locktype
postgres-# AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE
postgres-# AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation
postgres-# AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page
postgres-# AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple
postgres-# AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid
postgres-# AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid
postgres-# AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid
postgres-# AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid
postgres-# AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid
postgres-# AND blocking_locks.pid != blocked_locks.pid
postgres-#
postgres-# JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
postgres-# WHERE NOT blocked_locks.GRANTED;
blocked_pid | blocked_user | blocking_pid | blocking_user | blocked_statement | current_statement_in_blocking_process
-------------+--------------+--------------+---------------+-------------------+---------------------------------------
(0 rows)

PG< 9.2:

  SELECT bl.pid          AS blocked_pid,
         a.usename       AS blocked_user,
         kl.pid          AS blocking_pid,
         ka.usename      AS blocking_user,
         a.current_query AS blocked_statement
  FROM  pg_catalog.pg_locks         bl
   JOIN pg_catalog.pg_stat_activity a  ON a.procpid = bl.pid
   JOIN pg_catalog.pg_locks         kl ON kl.transactionid = bl.transactionid AND kl.pid != bl.pid
   JOIN pg_catalog.pg_stat_activity ka ON ka.procpid = kl.pid
  WHERE NOT bl.GRANTED;https://wiki.postgresql.org/wiki/Lock_Monitoring
时间: 2024-10-10 15:47:53

PostgreSQL 锁监控的相关文章

postgresql锁

postgresql锁: postgresql中有3种锁模式,分别为:spinlock.lwlook和regularlock. 1.spinlock自旋锁 spinlock使用互斥信息,与操作系统和硬件环境联系比较密切.spinlocky的主要特点是封锁的时间很短,没有等待队列和死锁检测机制.事务结束时,不能自动释放spinlock锁. 2.LWLock轻量级锁 LWLock主要提供对共享存储器的数据结构的互斥访问.LWLock的主要特点是由等待队列和无死锁检测.事务结束时,可以自动释放lwlo

PostgreSQL 锁等待诊断详解

摘要PostgreSQL和大多数传统RDBMS一样,都设计了大量的锁来保证并发操作的数据一致性. 同时PG在设计锁等待时,以队列方式存储等待锁. 参考 ProcSleep()@src/backend/storage/lmgr/proc.chttp://blog.163.com/[email protected]/b... PostgreSQL和大多数传统RDBMS一样,都设计了大量的锁来保证并发操作的数据一致性. 同时PG在设计锁等待时,以队列方式存储等待锁. 参考 ProcSleep()@sr

PostgreSQL锁查询与杀掉进程说明

查询表中存在的锁 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) = 'TABLE_NAME'; 以上为查询某表上是否存在锁的SQL语句. 查到后发现确实存在锁,如下: locktype | database |  pid  |      mode       | r

POSTGRESQL 锁表的问题

一.找出所的语句 select wait.pid, wait.query as wait_query, wait.query_start as wait_query_start, wait.locktype, granted.pid as waitfor_pid, granted.relation, granted.datname || '.' || d.nspname || '.' || c.relname as name, granted.transactionid, granted.vir

数据库并发事务控制四:postgresql数据库的锁机制二:表锁

在博文<数据库并发事务控制四:postgresql数据库的锁机制 > http://blog.csdn.net/beiigang/article/details/43302947 中后面提到: 常规锁机制可以参考pg的官方手册,章节和内容见下面 13.3. Explicit Locking http://www.postgresql.org/docs/9.4/static/explicit-locking.html 这节分为:表锁.行锁.页锁.死锁.Advisory锁(这个名字怎么翻译好???

查看锁信息(开启InnoDB监控)

当前mysql版本:5.6.21 一.背景 在mysql处理死锁问题时,由于show engine innodb status输出来的死锁日志无任务事务上下文,并不能很好地诊断相关事务所持有的所有锁信息,包括:锁个数.锁类型等. 于是,需要能查看到更详细的事务锁占用情况. 二.INNODB监控机制(InnoDB Monitors) mysql提供一套INNODB监控机制,用于周期性(每15钞)输出INNODB运行相关状态(INNODB运行状态.表空间状态.表状态等)到mysqld服务标准错误输出

企业级开源监控软件zabbix

最快速的对一个开源软件有一定的认识和了解,最好的方法就是看官网介绍. ------付炜超 第一问:zabbix是什么? 答:Zabbix是专为监控的可用性和IT基础设施组件的性能极限的企业级软件,Zabbix是开源的,是在没有成本 第二问:zabbix可以干什么? 答:Zabbix它可以收集几乎无限的类型从网络数据.高性能实时监控意味着数以万计的服务器.虚拟机和网络设备可以同时监测.随着存储数据,可视化功能是可用的(概述.地图.图表.屏幕等),以及非常灵活的分析预警目的数据的方法. 第三问:为什

从一个死锁看mysql innodb的锁机制

背景及现象 线上生产环境在某些时候经常性的出现数据库操作死锁,导致业务人员无法进行操作.经过DBA的分析,是某一张表的insert操 作和delete操作发生了死锁.简单介绍下数据库的情况(因为涉及到真实数据,这里做了模拟,不影响具体的分析和分析的结果.)假设存在如下2张表: Order 表的数据如下: Customer表的数据如下: Order和Customer 在实体关系上存在一个关联,即order实体拥有一个指向customer实体的指针.在数据库设计的时 候,order表的custome

[翻译]开源PostgreSQL监控工具OPM

一个好消息:九月,PostgreSQL OPM开发小组发布了开源的PostgreSQL数据库监控套件的第一个RELEASE版本OPM v2.3.PostgreSQL是先进的高级数据库,但它的一个重要的缺陷是缺乏开源的专门的监控工具.与它的竞争对手相比,PostgreSQL社区没有能提供一套与Oracle Grid Control,MySQL Workbench 或 SQL Server Management Studio类似的产品化的监控工具.OPM项目正是一个完整的开源管理套件,它提供图形化的