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

news2024/11/15 4:35:41

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

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视图查询锁信息

    SELECT
        pg_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.coloradmin.cn/o/2240599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【QT常用技术讲解】优化网络链接不上导致qt、qml界面卡顿的问题

前言 qt、qml项目经常会涉及访问MySQL数据库、网络服务器,并且界面打开时的初始化过程就会涉及到链接Mysql、网络服务器获取数据,如果网络不通,卡个几十秒,会让用户觉得非常的不爽,本文从技术调研的角度讲解解决此类问…

JS的学习与使用

JS的学习与使用 一 什么是Javascript? Javascript是一门跨平台,面向对象的脚本语言,是用来控制网页行为的,它能使网页可以交互 java与Javascript是完全不同的语言,不论是概念还是设计,但是基础语法类似 E…

WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇

WebRTC视频 01 - 视频采集整体架构 WebRTC视频 02 - 视频采集类 VideoCaptureModule [WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇](本文) WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇 WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇 一、前…

发布rust crate

文章目录 一、cargo构建的配置类型:dev与release两种1.编译级别2.将 crate 发布到 Crates.io对整个库的注释pub use再导出功能发布crates.io 参考 一、cargo构建的配置类型:dev与release两种 $ cargo buildFinished dev [unoptimized debuginfo] targe…

Bugku CTF_Web——文件上传

Bugku CTF_Web——文件上传 进入靶场 My name is margin,give me a image file not a php抓个包上传试试 改成png也上传失败 应该校验了文件头 增加了文件头也不行 试了一下 把文件类型改成gif可以上传 但是还是不能连接 将Content-Type改大小写 再把文件后缀名改成php4 成…

三菱FX5UPLC以太网Socket通信功能

通过专用指令与通过以太网连接的对象设备以TCP及UDP协议收发任意数据的功能。 *1、是用于存储从开放的对象设备中接收到的数据的区域。 CPU模块:连接No.1~8以太网模块:连接No.1~32 以TCP协议进行通信时 TCP是在对象设备的端口号间建立连接,从而进行可靠的数据通信…

jmeter介绍、使用方法、性能测试、现参数化和数据驱动、分布式测试、压力测试、接口测试

目录 1.JMeter的组件介绍 2.JMeter介绍和使用方法 3.使用JMeter进行性能测试 4.JMeter如何实现参数化和数据驱动 5.使用JMeter进行分布式测试 6.使用JMeter完成压力测试 7.使用JMeter完成接口测试 下载并安装JMeter:从官方网站(https://jmeter.ap…

【Android】组件化开发入门

文章目录 引入组件是什么?为什么使用组件化开发?什么是模块化,组件化,插件化?常见实现 组件分层创建module 组件单独调试配置组件工程类型配置组件ApplicationId和AndroidManifest文件 引入 组件是什么? 组件(Component&#…

java访问华为网管软件iMaster NCE的北向接口时传递参数问题

上一篇文章介绍了利用《java访问华为网管软件iMaster NCE的北向接口》的一般性步骤,这里详细介绍其中一个读取性能数据的示例。原因是读取华为网管软件北向接口,完全找不到可供参考的例子。如果不需要传递什么参数,就能获取到结果&#xff0c…

鸿蒙 入门——ArkUI 自定义组件间的“后代“双向同步@Provide和@Consume装饰器小结(五)

文章大纲 引言一、Provide和Consume装饰器概述1、Provide和Consume关系的绑定2、使用规则3、变量的传递/访问规则4、支持的观察变化的场景5、Provide和Consume变量的值初始化和更新机制5.1、初始渲染5.2、当Provide装饰的数据变化时:5.3、当Consume装饰的数据变化时…

【MySQL从入门到放弃】InnoDB磁盘结构(一)

前言 从MySQL 5.5版本开始默认 使用InnoDB作为引擎,它擅长处理事务,具有自动崩溃恢复的特性,在日常开发中使用非常广泛。 下面是官方的InnoDB引擎架构图,主要分为内存结构和磁盘结构两大部分。 上一篇文章,我们解析了…

C哈的刷题计划之输出数字螺旋矩阵(1)

1、盲听C哈说 都说数据结构与算法是编程的核心,它们两个是内功与心法😀,其它编程工具只是招式,学会了内功与心法,学习新事物(这里特指层出不穷的IT技术)就没有那么难了,实际上&#…

cv::RotatedRect::points误差较大

最后发现不是point的精度问题,float不至于产生这么大误差,是自己代码里缓存了顶点坐标,后面由手动修改了旋转矩形的角度,导致不匹配! 下文可以忽略了-_-! 发现一个天坑,通过高宽和角度构造了一个旋转矩形 …

ThinkServer SR658H V2服务器BMC做raid与装系统

目录 前提准备 一. 给磁盘做raid 二. 安装系统 前提准备 磁盘和系统BMC地址都已经准备好,可正常使用。 例: 设备BMC地址:10.99.240.196 一. 给磁盘做raid 要求: 1. 将两个894G的磁盘做成raid1 2. 将两块14902G的磁盘各自做…

7天用Go从零实现分布式缓存GeeCache(学习)(2)

参考:https://geektutu.com/post/geecache-day2.html // Cache 是一个 LRU 缓存(最近最少使用缓存),它不是并发安全的。 type Cache struct { maxBytes int64 // 缓存的最大字节数 nbytes int64 …

Ajax 与 Vue 框架应用点——随笔谈

老式 在老式的技术中,一个网页通常由前端工程师直接使用 HTML、CSS、JavaScript 编写而成 这种方式的优点很明显:简单粗暴,方便工程师以简单的思维完成工作 当然,缺点也很明显,包括但不限于: 直接原生开发…

鸿蒙动画开发06——打断动画

1、前 言 UI界面除了运行动画之外,还承载着与用户进行实时交互的功能。当用户行为根据意图变化发生改变时,UI界面应做到即时响应。 例如用户在应用启动过程中,上滑退出,那么启动动画应该立即过渡到退出动画,而不应该…

vue2和vue3的区别详解

vue2 VS vue3 对比vue2vue3配置脚手架cmd命令行可视化方式创建脚⼿架组件通信props、$emit、provide、$arrts、EventBus等props、$emit、provide、inject、arrts等数据监听watch,computedwatch,watchEffect,computed双向绑定Object.definePropertyProxyAPI⽣命周期四个阶段befo…

Spring Cloud Eureka 服务注册与发现

Spring Cloud Eureka 服务注册与发现 一、Eureka基础知识概述1.Eureka两个核心组件2.Eureka 服务注册与发现 二、Eureka单机搭建三、Eureka集群搭建四、心跳续约五、Eureka自我保护机制 一、Eureka基础知识概述 1.Eureka两个核心组件 Eureka Server :服务注册中心…

用MVVM设计模式提升WPF开发体验:分层架构与绑定实例解析

MVVM(Model-View-ViewModel)是一种架构模式,广泛应用于现代前端开发,尤其是在微软的WPF(Windows Presentation Foundation)应用程序中。它旨在通过将视图(UI)与业务逻辑(…