火焰图妙用:快速定位mysql具体函数

文章介绍了如何通过perf工具在服务器端收集MySQL执行altertable操作的函数调用数据,然后利用FlameGraph生成火焰图来理解其内部原理。通过观察火焰图,可以定位到性能瓶颈并使用gdb进行深入分析。
摘要由CSDN通过智能技术生成

背景

想要了解mysql某个功能或命令背后的具体原理,却因为不知道其对应的函数名,很难定位到相关源码。

使用火焰图:以定位alter table为例

参考:使用火焰图(FlameGraph)分析程序性能

1. 在服务器端使用perf采集数据

  • 采集:sudo perf record -F 99 -p $mysql_pid -g -- sleep 5

perf会统计mysql_pid对应的mysql实例在5秒内的函数调用情况,并在当前目录下生成perf.data文件,在这5秒内,在对应实例上执行alter table操作。

注意:为了让调用栈更加清晰,尽可能增大操作时间/采样时间的比值,比如对大表进行alter table操作以延长操作时间或减少采样时间等。

  • 解析:sudo perf script -i perf.data &> perf.unfold,对采集数据进行解析

2. 将解析数据拉到本机,生成火焰图

  • 使用httpfileserver下载解析数据

服务器安装httpfileserver,在对应目录下执行python -m SimpleHTTPServer,本地浏览器打开ip:port,选择perf.unfold下载。

  • 使用FlameGraph生成火焰图

https://github.com/brendangregg/FlameGraph,下载FlameGraph

执行命令:FlameGraph/stackcollapse-perf.pl perf.unfold | FlameGraph/flamegraph.pl > perf.svg

3. 使用浏览器打开svg文件

效果类似于:

在这里插入图片描述

这便能看到alter table操作的调用栈了。再通过函数名去gdb打断点,就能拿到很清晰的调用栈信息了。

拓展

  • 火焰图最主要的用途还是分析程序性能,如某函数出现“平顶”调用情况,这函数很可能就是性能瓶颈。
  • 不一定是msyql,其他大型项目定位具体函数时也可以用火焰图。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值