PG系列:PG数据库中分析操作系统IO是否正常

news/2025/11/10 16:34:53/文章来源:https://www.cnblogs.com/www-htz-pw/p/19207449

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

今天在自己ESXI环境中测试一个PG功能时遇到IO非常慢的文件,想从数据库中去分析和统计IO的性能,但是PG数据库中暂时没有像Oracle的10046这样的事件,无法非常直观和简单的去分析和统计IO性能问题,所以变相的就转到操作系统层面去分析了,所以这里将自己的分析过程和思路写出来。

1,操作系统定位TOP IO进程

这里可以通过从操作系统的iotop命令去定位top的io进程,也可以通过数据库pg_stat_activity去定位pid,建议是通过pg_stat_activity根据自己业务跑的sql语句定位当前的pid,相关的命令及脚本如下:

[root@pgc ~]# iotopTotal DISK READ :       0.00 B/s | Total DISK WRITE :      33.53 M/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/sTID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND4636 be/4 postgres    0.00 B/s   33.53 M/s  0.00 %  0.00 % postgres: checkpointer1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd --switched-root --system --deserialize 172 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]3 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_gp]4 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_par_gp]5 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [slub_flushwq]7 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H-events_highpri]10 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [mm_percpu_wq]11 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_tasks_rude_]12 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_tasks_trace]13 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]14 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_sched]15 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]16 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]17 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [cpuhp/0]

iotop命令默认最小化Linux环境是没有安装的,如果没有安装,可以通过python模拟写的iotop脚本来实现,如下所示:

[root@pgc ~]# python3 iotop
TIME                   PID     USER  READ KB/s  WRITE KB/s COMMAND
2025-07-28 06:56:11   4747 postgres       2.00        2.00 postgres: postgres postgres [local] idle in transaction
2025-07-28 06:56:11   4636 postgres       0.00    62074.00 postgres: checkpointer
2025-07-28 06:56:11   4638 postgres       0.00        4.00 postgres: walwriter

2,统计进程IO信息

这里是统计每一秒进程的IO统计信息,这个值只能作为参考,因为平均后的值无法用于定位每次IO是否正常

[root@pgc ~]# pidstat -d -p 1794 4
Linux 4.18.0-553.el8_10.x86_64 (pgc)    07/28/2025      _x86_64_        (10 CPU)05:22:21 AM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
05:22:25 AM   601      1794      0.00      0.00      0.00       0  postgres
05:22:29 AM   601      1794      0.00      0.00      0.00       0  postgres
05:22:33 AM   601      1794      0.00      0.00      0.00       0  postgres
05:22:37 AM   601      1794    256.00   2328.00      0.00       0  postgres
05:22:41 AM   601      1794   4192.00  41794.00      0.00       0  postgres
05:22:45 AM   601      1794   4128.00  41370.00      0.00       0  postgres
05:22:49 AM   601      1794      0.00      0.00      0.00       0  postgres
05:22:53 AM   601      1794      0.00      0.00      0.00       0  postgres
05:22:57 AM   601      1794      0.00      0.00      0.00       0  postgres
05:23:01 AM   601      1794      0.00      0.00      0.00       0  postgres
05:23:05 AM   601      1794      0.00      0.00      0.00       0  postgres
05:23:09 AM   601      1794   3296.00  32600.00      0.00       0  postgres
05:23:13 AM   601      1794   4224.00  42374.00      0.00       0  postgres
05:23:17 AM   601      1794   1056.00  10518.00      0.00       0  postgres
05:23:21 AM   601      1794      0.00      0.00      0.00       0  postgres
05:23:25 AM   601      1794      0.00      0.00      0.00       0  postgres
05:23:29 AM   601      1794      0.00      0.00      0.00       0  postgres
05:23:33 AM   601      1794      0.00      0.00      0.00       0  postgres
05:23:37 AM   601      1794      0.00      0.00      0.00       0  postgres
05:23:41 AM   601      1794     96.00    728.00      0.00       0  postgres
05:23:45 AM   601      1794   4320.00  43118.00      0.00       0  postgres
05:23:49 AM   601      1794   4160.00  41714.00      0.00       0  postgres
05:23:53 AM   601      1794      0.00      0.00      0.00       0  postgres
05:23:57 AM   601      1794      0.00      0.00      0.00       0  postgres
05:24:01 AM   601      1794      0.00      0.00      0.00       0  postgres

3,统计每次的响应事件

这里通过io_count.py的脚本来统计进程每次io的响应时间,确定不存在io抖动现象的存在,同时需要将io响应时间与物理磁盘io能达到的io性能做对比,物理磁盘io性能如果不知道,请与存储工程师或者查阅本次磁盘的说明书,不同磁盘的性能差异现在是太大了,没有任何可比性,比如我在我自己的MacOS的nvme与ESXI上面的SATA SSD的IO性能指标相差很多倍。

[postgres@pgc ~]$ python3 io_count.py -h
usage: io_count.py [-h] -p PID -t TIME [-f FILE]Trace and analyze IO syscalls.optional arguments:-h, --help            show this help message and exit-p PID, --pid PID     Target process ID-t TIME, --time TIME  strace duration in seconds-f FILE, --file FILE  strace output file
[postgres@pgc ~]$ python3 io_count.py -p 4747 -t 100 -f /tmp/4747.log
2025-07-28 06:34:17 : Script started.
2025-07-28 06:34:17 : Start strace on PID 4747, duration: 100s, output: /tmp/4747.log
strace: Process 4747 attached
strace: Process 4747 detached
2025-07-28 06:35:57 : Strace process terminated. Starting log analysis...
2025-07-28 06:36:00 : Log analysis completed. Report:
2025-07-28 06:36:00 : IO Type: pread64
Range       Count   Total(ms)   Avg(ms)   Percent   
0-0.1ms     946421  45339.46    0.05      99.34%
0.1-0.5ms   2441    116.94      0.05      0.26%
0.5-1ms     491     23.52       0.05      0.05%
1-2ms       1791    85.80       0.05      0.19%
2-3ms       236     11.31       0.05      0.02%
3-4ms       170     8.14        0.05      0.02%
4-5ms       109     5.22        0.05      0.01%
5-8ms       267     12.79       0.05      0.03%
8-15ms      284     13.61       0.05      0.03%
15-30ms     377     18.06       0.05      0.04%
>30ms       124     5.94        0.05      0.01%
------------------------------------------------------------
2025-07-28 06:36:00 : IO Type: pwrite64
Range       Count   Total(ms)   Avg(ms)   Percent   
0-0.1ms     897     20.99       0.02      100.00%
------------------------------------------------------------
2025-07-28 06:36:00 : Script finished.

4,总结

上面只是分析自己分析IO的一个思路,其中用到的几个脚本都是用AI来写的,因为现在这些小脚本,完全没有必要花心思去自己写了,当然如果大家需要脚本,可以加我微信,我发给大家。

------------------作者介绍-----------------------
姓名:黄廷忠
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/961525.shtml

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

相关文章

2025年智能控制与计算科学国际学术会议(ICICCS 2025)

2025年智能控制与计算科学国际学术会议(ICICCS 2025) 主办单位:南通理工学院 承办单位:南通理工学院信息工程学院 协办单位:南通市人工智能学会 论文出版 本会议所有的投稿都必须经过2-3位组委会专家严格审稿,最…

【连续六届稳定出版检索,往届见刊后1个月左右完成EI检索】第七届机器人、智能控制与人工智能国际学术会议(RICAI 2025)

【IEEE出版】第七届机器人、智能控制与人工智能国际学术会议(RICAI 2025)第七届机器人、智能控制与人工智能国际学术会议(RICAI 2025) 投稿审核:先投稿,先送审 截稿时间:多轮截稿,官网为准 组织单位 主办单位:…

Vue nextTick 全景指南:一篇吃透 $nextTick 用法与底层达成

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Intigriti Bug Bytes

本文详细介绍了2025年10月Intigriti Bug Bytes的技术内容,涵盖Next.js SSRF漏洞、WAF绕过技术、GraphQL攻击面枚举、内部Web扩展安全风险以及多种客户端漏洞利用技术,为安全研究人员提供实用的漏洞挖掘指导。Intigri…

098_尚硅谷_经典案例九九乘法表

098_尚硅谷_经典案例九九乘法表1.九九乘法表

基于MATLAB的光纤光传播特性仿真

一、仿真模型构建 1. 光纤参数定义 %% 光纤几何参数 a = 9e-6; % 核心半径 (单模光纤典型值) lambda = 1.55e-6; % 波长 (1550 nm) n_core = 1.46; % 核心折射率 n_cladding = 1.45; % 包层折射率%% 数值参数 L…

【多名IEEE Fellow,作为主讲嘉宾出席大会】第五届计算机科学、电子信息工程和智能控制技术国际会议(CEI 2025)

【IEEE出版】第五届计算机科学、电子信息工程和智能控制技术国际会议(CEI 2025)第五届计算机科学、电子信息工程和智能控制技术国际会议(CEI 2025) 2025年11月21-23日,中国-南宁-广西大学-君武馆玉林厅 主办单位…

差分进化(DE)与灰狼优化(GWO)结合的混合算法(DE-GWO)

一、算法原理与优势 1. 算法融合机制DE全局探索:通过差分变异(DE/rand/1)维持种群多样性,突破局部最优 GWO局部开发:利用灰狼社会等级结构(α/β/δ狼)进行精细搜索 互补性:DE的随机性弥补GWO早熟缺陷,GWO的收…

2025年广东软件开发外包公司权威推荐榜单:软件开发方案/软件开发测试/教育软件开发源头公司精选

在数字经济与产业智能化深度融合的背景下,广东作为全国软件产业高地,其软件开发外包服务凭借成熟的技术团队、丰富的行业经验及完善的服务体系,正成为企业数字化转型的重要支撑。数据显示,广东省软件相关企业数量超…

极限学习机(ELM)的原理、实现和应用

极限学习机(ELM)的原理、实现和应用。ELM是一种非常高效且易用的机器学习算法,特别适合快速建模和原型开发。 极限学习机(ELM)概述 极限学习机是一种单隐层前馈神经网络,其核心特点是隐层参数随机生成且不需要调整,…

安卓开发入门

安卓操作系统 广泛用于手机上,和苹果的ios系统二分天下。系统本身是linux变种,用c编写,但是开放的编程接口是 java 语言。 java java 是一门跨平台语言,可以编译成 java 字节码, 字节码运行在 java 虚拟机上,只要…

ModelScope 模型一键上线?FunModel 帮你 5 分钟从零到生产

FunModel 依托 Serverless + GPU,天然提供了简单,轻量,0 门槛的模型集成方案,给个人开发者良好的玩转模型的体验,也让企业级开发者快速高效的部署、运维和迭代模型。作者:百潼下一个 AI 爆款应用,或许就从您点击…

记录WPF 在清单列表设置了UIACESS为true,没有签名的报错“从服务器返回了一个参照”

出现的问题 1、最近有小伙伴开发平板的批注在我们平板机器上直接报了“从服务器返回了一个参照”,而之前的版本都是可以直接运行且不报错的。 2、查询了一下网上对于“从服务器返回了一个参照”一些讨论如下: win11下…

新手在哪里找预防感冒类公众号排版?

降温了,是时候提醒大家注意预防感冒了。如果你正打算做一篇预防感冒主题的公众号推文,不妨试试小墨鹰编辑器——里面有不少适合健康类内容的模板和素材,用起来挺顺手的。 选一个清爽干净的模板 在小墨鹰编辑器的模板…

领嵌iLeadE-588网关实现设备联网实现远程控制-工业智能网关

领嵌iLeadE-588网关实现设备联网实现远程控制-工业智能网关

2025年北京中央空调更换铜管维修护理权威推荐榜单:中央空调维修保养/中央空调电控系统改造升级/地源热泵进水维修护理精选

在中央空调系统高负荷运行与设备老化问题日益突出的背景下,更换铜管、电控系统升级及地源热泵专项维修等服务已成为保障系统稳定与能效的核心环节。据行业数据显示,2024年北京地区中央空调维修服务需求同比增长约15%…

2025年水果月饼批发厂家权威推荐榜单:五仁月饼/榴莲冰皮月饼/华美食品源头厂家精选

在月饼消费多元化与健康需求升级的市场环境下,水果月饼凭借其清新口感、创新风味及相对较低的甜度,已发展成为中秋市场中增长迅速的重要品类。行业数据显示,创新口味月饼在年轻消费群体中的接受度正持续提升。本文基…

springboot框架非常简单清晰

我看很多人跟着敲代码太迷糊了,其实逻辑很简单。把下面理解了所有的操作就很清晰了 前端给controller层发json,controller层把json封装为DTO发给Service,其实Service接口啥没有,只有一个调用方法,就完全控制着Imp…

智慧医疗新突破:揭秘ModbusRTU转EtherCAT神器

在智慧医疗的浪潮中,我们常常面临着一个关键问题:如何提升医疗设备控制的实时性和效率?传统的ModbusRTU串行通信协议虽广泛应用,但在高速、高精度的现代医疗环境中,其局限性也日益凸显。而EtherCAT作为一种高性能…

打破工业现场的“物理围墙”,如何让工程师在家也能改程序?

一、300 公里的紧急驰援,不如 1 小时的远程攻坚​ 某沿海化工厂的反应釜控制系统突发故障,PLC 程序逻辑异常导致产线骤停。车间主任看着仪表盘上跳动的报错代码,第一时间拨通了工程师老张的电话 —— 此时老张正在 …