本文将介绍如何使用perf和Flame Graphs工具对MySQL进行性能分析,这两个工具能够以图形化的形式展现MySQL运行过程中的哪些函数被调用以及调用次数,协助分析MySQL性能瓶颈,为性能优化提供更多的参考依据。
一、安装软件包:
- sudo yum install -y perf
- git clone https://github.com/brendangregg/FlameGraph
二、数据采集:
perf 主要用来采集性能数据,Flame Graphs 使用perf采集的数据进行图形化展示,性能数据采集常用的一些命令如下:
1、采集mysqld进程10秒的性能数据。
sudo perf record -a -F 99 -g -p $(pgrep -x mysqld) — sleep 10
2、持续采集mysqld性能数据,直到ctrl+c取消。
sudo perf record -a -F 99 -g -p $(pgrep -x mysqld)
3、采集mysqld从启动到关闭整个生命周期的性能数据,尤其适合采集mysqld刚启动时的性能数据。
sudo perf record -a -F 99 -g — /sbin/mysqld –defaults-file=/etc/my.cnf
4、采集执行某个SQL时的性能数据。
sudo perf record -a -F 99 -g -p $(pgrep -x mysqld) — mysql -e “SELECT * FROM db.table”
三、数据加工:
数据采集完成后,通常会生成一个二进制数据文件perf.data,通过下面的命令将采集的二进制数据进行加工,转换成易于阅读的文本文件,如下:
sudo perf script > perf.script
生成图形化的性能视图:
将perf.script文件作为输入,通过Flame Graphs工具,生成svg格式的性能图形。
~/src/FlameGraph/stackcollapse-perf.pl perf.script | ~/src/FlameGraph/flamegraph.pl > flamegraph.svg
四、总结:
使用perf+Flame Graphs方式,能够从更深层的函数调用上,以图形化的方式看到MySQL是如何执行的,以及具体某个函数执行了多少次,能够更好的看到隐藏在进程之后的具体操作,相对于文本,图形化的展示,更容易被人阅读,也更容易发现性能瓶颈以及相应的优化方向。