开发者社区> rudy_gao> 正文

postgresql 查看系统中的锁信息与锁资源

简介: --查看当前活动的客户端连接数 SELECT count(*) FROM pg_stat_activity WHERE NOT pid=pg_backend_pid(); ...
+关注继续查看
--查看当前活动的客户端连接数
 SELECT count(*) FROM pg_stat_activity WHERE NOT pid=pg_backend_pid();    
 
 
 --查询客户端连接的情况
 SELECT pid,case when waiting='f' then 'already get lock,sql executing' when waiting='t' then 'waiting get lock,sql waiting execute' end lock_satus,
 current_timestamp - least(query_start,xact_start) AS runtime,substr(query,1,25) AS current_query
FROM pg_stat_activity WHERE NOT pid=pg_backend_pid() and state<>'idle' and application_name<>'pg_statsinfod' order by runtime desc






		
--查看持有锁和等待锁的一些信息:
--reltype=0代表其为索引
SELECT locker.pid,
        pc.relname,
        locker.mode,
        locker_act.application_name,
        least(query_start,xact_start) start_time,
        locker_act.state,
        CASE
    WHEN granted='f' THEN
    'wait_lock'
    WHEN granted='t' THEN
    'get_lock'
    END lock_satus,current_timestamp - least(query_start,xact_start) AS runtime,
	locker_act.query
FROM pg_locks locker,pg_stat_activity locker_act, pg_class pc
WHERE locker.pid=locker_act.pid
        AND NOT locker.pid=pg_backend_pid()
        AND application_name<>'pg_statsinfod'
        AND locker.relation = pc.oid
        AND pc.reltype<>0 --and pc.relname='t'
ORDER BY  runtime desc;














--查询系统中正在执行的或者等待执行的事务
--注意其只是代表事务信息,系统中也有可能存在慢的查询
select pc.relname lock_table,pc.oid,tans.pid, CASE
    WHEN waiting='f' THEN
    'already get lock,sql executing'
    WHEN waiting='t' THEN
    'waiting get lock,sql waiting execute'
    END lock_satus,
	least(query_start,xact_start) query_start,
	current_timestamp - least(query_start,xact_start) AS runtime,
	psa.query
from pg_locks tans,pg_locks pl,pg_class pc ,pg_stat_activity psa
where tans.transactionid is NOT null and pc.oid=pl.relation and tans.pid=pl.pid
and tans.pid=psa.pid and pc.reltype<>0
order by runtime desc;




 --查看系统中正在执行的sql与lock_table有关的信息
SELECT locktype,
        pg_locks.pid,
         virtualtransaction,
         transactionid,
         nspname,
         relname,
         mode,
         granted,
    CASE
    WHEN granted='f' THEN
    'get_lock'
    WHEN granted='t' THEN
    'wait_lock'
    END lock_satus,
    CASE
    WHEN waiting='f' THEN
    'already get lock,sql executing'
    WHEN waiting='t' THEN
    'waiting get lock,sql waiting execute'
    END lock_satus, 
	current_timestamp - least(query_start,xact_start) AS runtime,
	cast(date_trunc('second',query_start) AS timestamp) AS query_start, substr(query,1,25) AS query
FROM pg_locks LEFT OUTER
JOIN pg_class
    ON (pg_locks.relation = pg_class.oid) LEFT OUTER
JOIN pg_namespace
    ON (pg_namespace.oid = pg_class.relnamespace), pg_stat_activity
WHERE NOT pg_locks.pid=pg_backend_pid()
        AND pg_locks.pid=pg_stat_activity.pid
        AND pg_class.relname='t' --此处进行替换
ORDER BY  query_start;






--查看PostgreSQL正在执行的SQL 
SELECT 
    procpid, 
    start, 
    now() - start AS lap, 
    current_query 
FROM 
    (SELECT 
        backendid, 
        pg_stat_get_backend_pid(S.backendid) AS procpid, 
        pg_stat_get_backend_activity_start(S.backendid) AS start, 
       pg_stat_get_backend_activity(S.backendid) AS current_query 
    FROM 
        (SELECT pg_stat_get_backend_idset() AS backendid) AS S 
    ) AS S ,pg_stat_activity pa
WHERE 
   current_query <> '<IDLE>' and  procpid<> pg_backend_pid() and pa.pid=s.procpid and pa.state<>'idle'
ORDER BY 
   lap DESC;
 
procpid:进程id
start:进程开始时间
lap:经过时间
current_query:执行中的sql
怎样停止正在执行的sql
SELECT pg_cancel_backend(进程id);
或者用系统函数
kill -9 进程id;




--查找是否有waiting
ps -ef|grep postgres | grep wait














--查看当前库表和索引的的大小并排序显示前20条
SELECT
nspname,
relname,
relkind as "type",
pg_size_pretty(pg_table_size(C.oid)) AS size,
pg_size_pretty(pg_indexes_size(C.oid)) AS idxsize,
pg_size_pretty(pg_total_relation_size(C.oid)) as "total"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND
nspname !~ '^pg_toast' AND
relkind IN ('r','i')
ORDER BY pg_total_relation_size(C.oid) DESC
LIMIT 20;

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PostgreSQL 监控1统计进程和统计信息的解读|学习笔记(二)
快速学习PostgreSQL 监控1统计进程和统计信息的解读
161 0
PostgreSQL监控1统计进程和统计信息的解读|学习笔记(一)
快速学习PostgreSQL监控1统计进程和统计信息的解读
218 0
查看私有定制RDS实例信息
本文介绍如何查看私有定制RDS的基本信息和配置信息。 前提条件 进行私有RDS管理之前,您需要先购买私有定制RDS实例,详情请参见步骤二:在私有定制RDS实例之上构建PolarDB-X 1.0数据库。
116 0
阿里云物联网平台设备上下线信息通过规则引擎流转到RDS示例
这里演示如何将设备的上下线信息通过规则引擎将消息流转到RDS数据库。
713 0
PostgreSQL:SQL信息统计拓展
概述 pg_stat_statements是PostgreSQL数据库的一个拓展插件,用于收集数据库中的SQL运行信息,例如SQL的总执行时间,调用次数,共享内存命中率等信息。用于监控数据库的性能,是数据库性能监控的重要拓展模块pg_stat_statements 默认在PG的源码包中就有,无需下...
1929 0
PostgreSQL 12: 新增 pg_partition_tree() 函数显示分区表信息
PostgreSQL 12 新增三个分区查询函数,如下: pg_partition_tree(regclass): 返回分区表详细信息,例如分区名称、上一级分区名称、是否叶子结点、层级,层级 0 表示顶层父表。
5446 0
SQL 中删除超出时间限制的数据,并返回删除数据信息(Mybatis+postgresql)
前言 前一阵子,接到一个活,主要内容是这样的,数据库中存在一些过期的日志(可能是一天前的数据,或者是一个月前的数据,等等),将这些数据删除掉,并且返回这些数据的信息(就是说我得知道自己到底删了哪些数据呀?)。
1752 0
PostgreSQL技术周刊第23期:PostgreSQL统计信息
PostgreSQL(简称PG)的开发者们:云栖社区已有5000位PG开发者,发布了3000+PG文章(文章列表),沉淀了700+的PG精品问答(问答列表)。 PostgreSQL技术周刊会为大家介绍最新的PG技术与动态、预告活动、最热问答、直播教程等,欢迎大家订阅PostgreSQL技术周刊。
4351 0
PostgreSQL统计信息
PostgreSQL统计信息 1.数据库统计信息概览 2.pg_stat_database关键指标 postgres=# select * from pg_stat_database where datname='postgres'; -[ RECORD 1 ]-----+-----------...
3340 0
【PostgreSQL系列直播】PostgreSQL数据库统计信息讲解
主讲人 王健(绛云)阿里云数据库专家服务组PostgreSQL dba,对于PostgreSQL性能优化,问题排查诊断有一定经验,内核源码也有一定了解。 直播内容 内容介绍:帮助明白这些指标的含义,学会如果根据这些指标分析问题和发现问题。
2436 0
+关注
rudy_gao
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
PostgreSQL 物联网六脉神剑
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像