【使用perf和火焰图分析PostgreSQL数据库的性能瓶颈】

news2024/11/23 22:36:33

Perf工具可用来对软件进行优化,包括算法优化(空间复杂度、时间复杂度)和代码优化(提高执行速度、减少内存占用)等等,perf 最常用的参数有top、stat、record,另外还有list和report等。
本文主要使用Perf的record,script以及FlameGraph工具生成火焰图,来进一步分析性能瓶颈和函数调用。

一、生成采样数据perf.data

使用perf record 采集数据,其中-g表示记录调用栈,-p 49383是进程号,即对哪个进程进行分析。采集后可以ctrl+c终止。

-e参数来统计需要关注的事件。 多个事件就用多个-e 连接。此处我带了cpu-clock,cpu-clock可以用来表示程序执行经过的真实时间,而无论CPU处于什么状态(Pn(n非0)或者是C状态)。

除了cpu-clock事件,比较常用的还有CPU cycle,CPU cycles用来表示执行程序指令花费的时钟周期数,如果CPU处于Pn(n非0)或者是C状态,则cycles的产生速度会减慢。
如果想查看哪些代码消耗的真实时间多,则可以使用cpu-clock事件;而如果想查看哪些代码消耗的时钟周期多,则可以使用CPU cycles事件。

除了此类cpu火焰图,也可以带上其他类型的事件进行统计,例如内存火焰图,分析内存的变化情况,可以进一步帮助分析内存被哪些模块占用、内存泄露问题的原因等问题。bio火焰图,统计io的耗时由哪些函数占用,便于分析优化io性能。此处不做赘述。

  perf record -e cpu-clock -g -p 49383

除此之外,常见的还可以带上如下选项:

-F 99:表示每秒99次
sleep 30:采集持续30秒,这样就不需要手动ctrl+c终止。
-o xxx:指定采集后输出的文件名等。
-t:指定线程TID。
-a:显示在所有CPU上的性能统计信息。
-C:显示在指定CPU上的性能统计信息。

image.png

第一步生成的perf.data文件其实也可以用perf report查看,只不过不直观

perf report -n --stdio -i perf.data

image.png

二、用perf script工具对perf.data进行解析

-i跟第一步收集的文件,进行解析

perf script -i perf.data > perf.script

image.png

三、将perf.script中的符号进行折叠

使用FlameGraph的stackcollapse-perf.pl折叠调用栈

 ./stackcollapse-perf.pl perf.script > perf.folded

image.png

四、生成svg火焰图

使用FlameGraph的flamegraph.pl生成svg格式的火焰图

./flamegraph.pl perf.folded > perf.svg

五、查看火焰图

生成的火焰图大概是如下这样
 

image.png


其中每一个方框是一个函数,鼠标悬浮时会显示完整的函数名、抽样抽中的次数、占据总抽样次数的百分比。方框的长度,代表了它的执行时间,所以越宽的函数,就表示它被抽到的次数多,即执行的时间长。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。

可以看到all上边的第一个就是postgres。如下的每个方框,即函数都可以点击,点击后,会显示其对应调用的子函数。例如点击XLogInsertRecord函数,可以显示出其调用的堆栈

image.png

点击hash_search_with_hash_value,显示它调用的堆栈。

image.png

火焰图主要看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题,可能是瓶颈。可以尝试对此类函数进行优化,从而提高性能。

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

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

相关文章

枚举和反射

枚举 枚举 枚举是一种特殊的类,它可以有自己的属性、方法和构造方法。 两种枚举的方法 自定义枚举 a.将构造器私有化,防止外部直接new b.去掉set方法,防止属性被修改 c.在内部直接创建固定的对象 通过类名直接去访问 关键字枚举 用…

即拼七人拼团:突破传统模式,二二复制结合拼团快速引流

如何解决平台运营难的问题?企业主要关注的点则是新客的引流、用户的留存、平台活跃度提高以及如何变现等一些的问题,下面就针对这块分析提出一个七人拼团的解决方案。一个7人成团的即拼模式,为什么会在众多拼团模式中脱颖而出,即拼…

学会Mybatis框架:一文掌握MyBatis与GitHub插件分页的完美结合【三.分页】

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Mybatis的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.Mybatis分页 1. Mybatis自带分页 2…

职业技术培训内容介绍

泰迪职业技术培训包括:Python技术应用、大数据技术应用、机器学习、大数据分析 、人工智能技术应用。 职业技术培训-Python技术应用 “Python技术应用工程师”职业技术认证是由工业和信息化部教育与考试中心推出一套专业化、科学化、系统化的人才考核标准&…

8.24随笔记录科研灵感

在B站浏览关于人脸3D的视频,无意看到这一部分“结构光-深度图信息” 【巧的是这也是微软的模型】 就想到了自己的V4.3版本的算法里面估计距离其实用的也是结构光(红光)来估测距离,而且目前水下图像处理领域并没有采用这个方法&am…

【DC】逻辑综合实战

DC实战 0. 学习目标1. Design1.1 Design Schematic1.2 Design Specification 2. 配置文件和约束文件2.1 配置文件(1) common_setup.tcl 文件(2) dc_setup.tcl 文件(3) .synopsys_dc.setup 文件 2.3 启动工具查看单元库信息(1) 查看目标库的时间单位 2.3 设计约束文件(1) 时钟约…

洗涤护理门店小程序搭建全攻略:数字化转型的起点

在现代社会中,人们越来越注重便捷和个性化的服务体验。而随着智能手机的普及,小程序成为了商家与用户之间沟通的重要桥梁。在这篇文章中,将介绍如何使用第三方小程序制作平台搭建一个个性化干洗店洗护小程序。 首先,我们需要注册并…

ORB-SLAM2报错集合(数据集测试系列1)

目录 错误1 错误2 错误3 错误4 错误5 错误6 错误7 错误8 TUM-RGBD测试 KITTI测试 EuRoC测试 写在前面~ ORB-SLAM2 github链接:GitHub - electech6/ORB_SLAM2_detailed_comments: Detailed comments for ORB-SLAM2 with trouble-shooting, key formula …

单个无人机三维路径规划问题及其建模

单个无人机三维路径规划问题及建模如下: 参考文献: [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120

Grafana Dashboard 备份方案

文章目录 Grafana Dashboard 备份方案引言工具简介支持的组件要求配置备份安装使用 pypi 安装grafana备份工具配置环境变量使用Grafana Backup Tool 进行备份恢复备份 Grafana Dashboard恢复 Grafana Dashboard结论Grafana Dashboard 备份方案 引言 每个使用 Grafana 的同学都…

vue离线缓存资源文件

本文章主要是解决大文件,实时请求资源浪费网络资源的问题 从而有效的将解决用户体验的问题 话不多说上才艺 ⬇️⬇️⬇️⬇️⬇️⬇️⬇️ 找到项目中的 index.html 文件,并在 html 标签中加入 manifest"manifest.appcache" 安装 appcache-manifest 包 npm ins…

深入浅出理解相机标定原理

重要说明:本文从网上资料整理而来,仅记录博主学习相关知识点的过程,侵删。 一、参考资料 微信公众号:计算机视觉life 专栏:#相机标定 Camera Calibration 张正友标定法-完整学习笔记-从原理到实战 二、相机标定相…

C语言刷题训练DAY.12

1.统计成绩 解题思路&#xff1a; 这里我们设置两个变量记录最大值和最小值&#xff0c;再用一个sum统计分数总和即可。 解题代码&#xff1a; #include<stdio.h> int main() {int n 0;scanf("%d", &n);double arr[100] { 0 };int i 0;//最高分double …

UVM Heartbeat机制

1. 前言 在硬件电路中&#xff0c;为了使系统在异常情况下能自动复位&#xff0c;一般都需要引入看门狗(Watchdog)。看门狗其实就是一个定时器电路。当看门狗启动后&#xff0c;计数器开始自动计数&#xff0c;经过一定时间&#xff0c;如果没有被清零&#xff0c;计数器溢出就…

谁为软件质量负责?

如果我们直接问自己以下问题——谁负责软件质量&#xff0c;我们首先想到的就是——当然是测试人员&#xff01;但这并不像看起来那么容易。 IT领域有几个特点&#xff0c;总是发生在软件测试的最后阶段&#xff0c;就在它发布之前。它们使我们不仅从软件的技术质量保证的角度…

学习JAVA打卡第四十一天

字符串与字符数组、字节数组 ⑴字符串与字符数组 String类的构造方法String&#xff08;char a[]&#xff09;和String&#xff08;char a[]&#xff09;,int offset,int length,分别用数组a中的全部字符和部分字符创建string对象。 String类也提供将string对象的字符序列存…

vray for Cinema 4D如何创建照片级真实室内效果?

在V-Ray for Cinema 4D中渲染 3D室内设计一开始可能会很困难&#xff0c;但您投入的努力总会得到回报。无论您的技术水平和创意眼光如何&#xff0c;在 V-Ray 中创建室内设计时都需要考虑很多事项。 在这篇博文中&#xff0c;我们将分享一些最佳实践&#xff0c;帮助您创建令人…

12-总结-从 0 开始搭建框架

项目结构: 一. 安装第三方库 # 下载源: https://pypi.tuna.tsinghua.edu.cn/simple/pip3 install flask2.3.2 pip3 install jinja23.1.2 pip install pymysql # 保持持久化pip install flask-script2.0.3 # 管理应用程序 pip install flask-sqlalchemy3.0.3 # 实现ORM映射…

高等数学之不定积分

由导函数推原函数就是不定积分 只是一个&#xff01; 记得常数C!!! 不定积分的几何含义

基于TechGrow实现Hexo引流微信公众号

首发博客地址 https://blog.zysicyj.top/ # 前言 Hexo 博客建议安装 hexo-readmore (opens new window) 插件&#xff0c;将 TechGrow (opens new window) 的免费微信公众号引流工具整合到博客中&#xff0c;用户扫码关注微信公众号后可以解锁全站文章&#xff0c;让微信公众号…