PG实例CPU使用率高排查思路

server/2024/11/15 0:22:46/

一、查看具体哪个会话占用高

top 查看哪个pid使用cpu高
psql 登录到数据库中查看具体的语句
SELECT pid, query FROM pg_stat_activity WHERE pid = ‘top查看到的pid’;

二、查看锁

在PostgreSQL中查看锁的状态,你可以使用pg_locks系统视图来获取当前数据库中的锁信息。以下是一些查询示例,可以帮助你查看和分析锁的情况:

  1. 查看所有当前锁

    SELECT * FROM pg_locks;
    

    这个查询将返回所有当前未解决的锁的信息。

  2. 根据锁类型查询

    • 查询所有表级锁:
      SELECT * FROM pg_locks WHERE locktype = 'relation';
      
    • 查询所有行级锁:
      SELECT * FROM pg_locks WHERE locktype = 'tuple';
      

    这些查询将分别返回表级锁和行级锁的详细信息。

  3. 查询特定数据库的锁

    SELECT * FROM pg_locks WHERE database = (SELECT oid FROM pg_database WHERE datname = 'your_database_name');
    

    'your_database_name'替换成你想要查询的数据库名称,这个查询将返回特定数据库中的锁信息。

  4. 查询持有锁的进程

    SELECT * FROM pg_locks WHERE pid = 12345;
    

    12345替换成你想要查询的进程ID,这个查询将返回特定进程持有的锁的信息。

  5. 查询等待锁的进程

    SELECT * FROM pg_locks WHERE granted = false;
    

    这个查询将返回所有正在等待锁的进程的信息。

  6. 结合pg_stat_activity视图查询锁信息

    SELECTpg_stat_activity.pid,pg_stat_activity.query,pg_locks.locktype,pg_locks.mode,pg_locks.relation::regclass,pg_locks.transactionid,pg_locks.virtualxid,pg_locks.virtualtransaction,pg_locks.granted
    FROM pg_stat_activity
    JOIN pg_locks ON pg_stat_activity.pid = pg_locks.pid
    WHERE pg_locks.granted = false;
    

    这个查询将结合pg_stat_activity视图和pg_locks视图,返回所有正在等待锁的会话以及持有这些锁的会话的信息。

通过这些查询,你可以有效地监控和分析PostgreSQL中的锁状态,以识别潜在的锁争用和死锁问题,并优化数据库性能。

pg_locks

从你提供的pg_locks查询结果来看,我们可以看到多个relation类型的锁,这些锁都是针对特定relation(即表)的。这里是一些关键点的解释:

  1. locktyperelation表示这些锁是针对整个表的。
  2. database数据库的OID,这里是24975
  3. relation:表的OID,例如167953167950等。
  4. pid:持有锁的进程ID,例如589215947943179等。
  5. mode:锁的模式,这里大多数是AccessShareLock,表示共享锁,允许多个事务并发读取数据。
  6. grantedt表示锁已经被授予,f表示锁正在等待。
  7. fastpatht表示这个锁是通过快速路径授予的,f表示不是。
  8. waitstart:如果锁正在等待,这里会显示等待开始的时间。

分析锁的状态

  • 已授予的锁:大多数锁的granted列显示为t,表示这些锁已经被授予,事务可以继续执行。
  • 等待中的锁:有少数锁的granted列显示为f,表示这些锁正在等待。例如,167960167963167970的锁正在等待。

进一步的步骤

  1. 查看等待锁的详细信息
    如果你想要查看哪些事务正在等待这些锁,可以使用以下查询:

    SELECT * FROM pg_stat_activity
    WHERE pid IN (58921, 59479, 43179, 59242, 59535, 59536)
    AND state = 'idle';
    

    这个查询将返回持有或等待锁的进程的详细信息。

  2. 查看锁的等待时间
    如果锁正在等待,你可能想要知道它们已经等待了多久:

    SELECT pid, waitstart
    FROM pg_locks
    WHERE granted = false;
    
  3. 解决锁问题
    如果你发现有事务长时间持有锁或者等待锁,可能需要进一步分析这些事务的查询,考虑优化查询或者调整事务的执行顺序。

通过这些步骤,你可以更好地理解和管理PostgreSQL中的锁,以优化数据库性能和避免潜在的死锁问题。

wait_event_type

从你提供的pg_stat_activity视图中的wait_event_typewait_event列的信息来看,我们可以分析出以下内容:

  1. pid:进程ID,标识了当前正在等待的数据库进程。

  2. wait_event_type:等待事件的类型,它描述了进程正在等待的资源类型。可能的值包括LWLock(轻量级锁)、IO(输入/输出操作)等。

  3. wait_event:具体的等待事件,它提供了更详细的信息,说明进程正在等待什么。例如,WALWrite表示进程正在等待WAL(Write-Ahead Logging)写入操作完成,WALSync表示进程正在等待WAL同步操作完成。

分析结果

  • 进程79424、102543、102632、102633、77589:这些进程没有列出具体的等待事件,这意味着它们可能没有等待任何事件,或者正在执行一些不需要等待特定资源的操作。

  • 进程60269和61544:这两个进程都在等待WALWrite事件。这表明它们可能正在执行写入操作,并且正在等待WAL缓冲区中的数据被写入磁盘。这是数据库操作中的一个常见步骤,尤其是在处理大量写入时。

  • 进程61683:这个进程正在等待WALSync事件。这意味着它正在等待WAL缓冲区中的数据被同步到磁盘。这是确保数据持久性的重要步骤,特别是在事务日志中。

可能的影响和解决方案

  • WAL写入等待:如果多个进程长时间等待WALWriteWALSync,这可能表明WAL写入速度较慢,可能是由于磁盘I/O性能瓶颈或WAL缓冲区设置不当。可以考虑以下解决方案:

    • 检查磁盘性能和I/O子系统。
    • 增加WAL缓冲区的大小。
    • 优化WAL相关的配置参数,如wal_levelwal_buffers等。
  • 监控和优化:持续监控这些等待事件,特别是在高负载情况下,可以帮助识别性能瓶颈。使用pg_stat_activity视图可以帮助你实时监控数据库的运行状态,并及时调整配置以优化性能。

通过这些分析,你可以更好地理解数据库进程的等待行为,并采取相应的措施来优化数据库的性能和稳定性。

三、查看会话

SELECT datname, usename, COUNT(*) FROM pg_stat_activity WHERE datname != 'postgres' AND usename != 'postgres' GROUP BY datname, usename;
select pid,wait_event_type,wait_event from pg_stat_activity WHERE datname != 'postgres' AND usename != 'postgres' AND state != 'idle' ; 
select pid,wait_event_type,wait_event from pg_stat_activity WHERE state != 'idle' ; 

http://www.ppmy.cn/server/141974.html

相关文章

BILSTM法律网站用户提问自动分类

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

【网络安全 | 并发问题】Nginx重试机制与幂等性问题分析

未经许可,不得转载。 文章目录 业务背景Nginx的错误重试机制proxy_next_upstream指令配置重试500状态码非幂等请求的重试问题幂等性和非幂等性请求non_idempotent选项的使用解决方案业务背景 在现代互联网应用中,高可用性(HA)是确保系统稳定性的关键要求之一。为了应对服务…

上海ABC行测试面试题回忆版本

11.14号去ABC面试,流程上先做个半个小时的笔试,然后是排队面试。这次做笔试的人很多,有JAVA,大数据,前端,测试,我是最后一批测试。现场没有敢拍照。面试的时候,一共8个面试官&#x…

Snort的配置与使用

声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址:蓝队基础之网络七层杀伤链_哔哩哔哩_bilibili 目录 一、什么是Snort Snort的主要功能包括: Snort的工作原理: Snort的…

Unity 性能优化方案

‌Unity性能优化的主要方案包括以下几个方面‌: 一、减少Draw Call‌ Draw Call就是CPU调用图形编程接口,是CPU向GPU发送的命令 1.CPU和GPU并行工作的原理 CPU和GPU工作有一个命令缓冲区(Command Buffer) 命令缓冲区包含了一个命令队列,由C…

RDD 算子全面解析:从基础到进阶与面试要点

Spark 的介绍与搭建:从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 Spark on YARN:Spark集群模式…

PDF24:多功能 PDF 工具使用指南

PDF24:多功能 PDF 工具使用指南 在日常工作和学习中,PDF 是一种常见且重要的文档格式。无论是查看、编辑、合并,还是转换 PDF 文件,能够快速高效地处理 PDF 文档对于提高工作效率至关重要。PDF24 是一款免费、功能全面的 PDF 工具…

【LeetCode】每日一题 2024_11_11 切棍子的最小成本(区间 DP,记忆化搜索)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:切棍子的最小成本 双十一光棍节力扣给我们准备了 . . . 一根棍子 代码与解题思路 先读题: 题目给了 n 代表棍子的长度,给了 cuts 数组代表我们需要在这几个地方…