GaussDB火焰图分析

news/2025/1/23 7:19:47/文章来源:https://www.cnblogs.com/xiaoxu0211/p/18510715

问题描述

CPU利用率是衡量系统负载和健康度的重要指标之一,系统在运行过程中时常发生CPU利用率高的情况。在分析性能问题时,可通过火焰图查看CPU耗时,了解瓶颈在哪里。

问题现象

部分sql执行速度不符合预期。

告警

  • 慢sql告警。
  • cpu使用率高告警。
  • 数据库整体运行慢。

业务影响

业务性能差。

原因分析

函数存在性能问题。

处理方法

所需工具:stackcollapse-perf.pl、flamegraph.pl。注意权限修改。

  1. 登录主DN节点,查看耗CPU高的进程,查看进程号。

    top
    

    在这里插入图片描述
    参数说明:

    • %us (usr/user):用户空间占用CPU的百分比。
    • %sy (system):内核空间占用CPU的百分比。
    • %ni (nice):改变过优先级的进程占用CPU的百分比。
    • %id (idle):空闲CPU百分比。
    • %wa (iowait):IO等待占用CPU的百分比(实际CPU并未工作)。
    • %hi (hardware interrupts):硬中断(Hardware IRQ)占用CPU的百分比。
    • %si (software interrupts):软中断(Software Interrupts)占用CPU的百分比。
    • %st (steal):Hypervisor偷取的CPU的百分比。
  2. 执行perf 命令(performance 的缩写),它是 Linux 系统原生提供的性能分析工具,会返回 CPU 正在执行的函数名以及调用栈(stack)。
    通常,它的执行频率是 99Hz(每秒99次),如果99次都返回同一个函数名,那就说明 CPU 这一秒钟都在执行同一个函数,可能存在性能问题。

    perf record -e cpu-clock -g -p 28591 <主DN进程号> -- sleep 60<持续60s>
    

    Ctrl+c结束执行后,在当前目录下会生成采样数据perf.data(执行时长1分钟即可)。

  3. 用perf script工具对perf.data进行解析:

    perf script -i perf.data &> perf.unfold
    
  4. 将perf.unfold中的符号进行折叠:

    ./stackcollapse-perf.pl perf.unfold &> perf.folded
    
  5. 最后生成svg图:

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

    在这里插入图片描述
    y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。
    x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。
    火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。
    颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。
    https://support.huaweicloud.com/intl/zh-cn/gaussdb/index.html​

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

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

相关文章

为什么MySQL单表不能超过2000万行? (1)

​ 最近看到一篇《我说MySQL每张表最好不要超过2000万数据,面试官让我回去等通知》的文章,非常有趣。 文中提到,他朋友在面试的过程中说,自己的工作就是把用户操作信息存到MySQL里,因为数据量超大(5000万条左右),需要每天定时生成3张表,然后将数据取模分别存到这三张表…

js逆向笔记

Cookie 和 Session: 服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。 为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。 Cookie:通过在 客户端 记录的信息确定用户的身…

修改博客园主题

修改博客园主题 参考模板为:本博客皮肤 - 张贺贺呀 - 博客园 1.账号设置在账号设置中 1.选择博客皮肤为SimpleMemory,因为博客皮肤的修改是基于该皮肤 2.申请JS权限,一般申请后1-2h会通过 3.将参考模板中的代码分别粘贴到侧边栏、CSS等对应框中 2.个性化设置 完全照搬博主代…

【Java】若以框架(ruoyi-master)——10.BaseController源码了解

BaseController通用方法 Web层的通用数据。所有接口继承此方法。里面有一些各个接口会用到的通用方法。比如分页、返回消息、设置或获取一些登录信息,某些操作的时候,将日志写入或返回。方法归类 方法名称 说明请求参数预处理 initBinder() 将前台传递过来的日期格式的字符串…

GA/T1400视图库平台EasyCVR视频设备轨迹回放平台智慧园区视频监控方案

信息技术的持续进步和城市化进程的加快,使得作为城市发展关键组成部分的智慧园区对监控安全和智能管理的需求日益增长。GA/T1400视图库平台EasyCVR推出的智慧园区视频监控方案正是为了满足这一需求而设计的。该方案整合了高清视频监控、智能分析和远程管理等尖端技术,为智慧园…

百万商品查询,性能提升了10倍

前言 最近在我的知识星球中,有个小伙伴问了这样一个问题:百万商品分页查询接口,如何保证接口的性能? 这就需要对该分页查询接口做优化了。 这篇文章从9个方面跟大家一起聊聊分页查询接口优化的一些小技巧,希望对你会有所帮助。1 增加默认条件 对于分页查询接口,如果没有特…

MMpretrain使用Tiny ImageNet数据集

Tiny ImageNet是ImageNet的子集,ImageNet太大了,训练一次要好几天,于是准备用Tiny ImageNet代替ImageNet. /mmpretrain/mmpretrain/datasets/imagenet.py里面列出了ImageNet的两种格式:imagenet├── train│ ├──class_x| | ├── x1.jpg| | ├── x2.jpg| |…

在markdown上显示数学函数与数学函数图像

前言 这里分享数学函数与函数图像显示在markdown上的方式markdown编辑器 Obsidian 和 Typora数学函数显示 打开编辑器 (这里以Typora为例) 基础到可以忽略符号 html中以 & 开头, 以 ;结尾的特殊符号是可以直接输入在编辑器上显示的 图片上的显示结果即按照html源代码的格式…

如何进行颜色选择

进行颜色选择的步骤:1. 理解颜色理论;2. 考虑品牌标识和情感;3. 使用工具和资源;4. 进行A/B测试;5. 不要忽视辅助色。颜色理论是颜色选择的基础。它有助于您理解不同颜色之间的关系,以及它们如何在设计中共同协作。1. 理解颜色理论 颜色理论是颜色选择的基础。它有助于您…

C#学习 顶级语句(9)

代码与输出命名空间与类型定义 using ConsoleApp1.basic;FibonacciSequence.Run(20);MyClass.Hello(); MyNameSpace.MyClass.Hello();if (args.Length > 0) {Console.WriteLine("args的数目大于0."); } else {Console.WriteLine("args的数目为0."); }pu…

Origin2024中如何绘制雷达图?

雷达图是以从同一点开始的轴上表示的三个或更多个定量/变量的二维图表,轴径向排列显示多变量数据,也称为网络图,蜘蛛网图或星图等操作步骤: 1、先打开Origin2024软件,然后在Book1中输入如下示例数据,选中两列数据:2、点击菜单栏中【绘图】→【专业图】→【雷达图】: 3…

第10课 数据库之多表运用

一、多表查询 1、什么是多表关联查询 从2个表或者更多的表中查询我们需要的数据 2、多表连接的关系? (1)内连接 (2)左连接 (3)右连接 (4)左独有数据 (5)右独有数据 (6)全外连接 比如: a 表:1,2,3 b 表:1,2,4 内连接:显示左边12和右边12关联 …