MySQL性能分析工具(perf和Flame Graphs)

本文将介绍如何使用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是如何执行的,以及具体某个函数执行了多少次,能够更好的看到隐藏在进程之后的具体操作,相对于文本,图形化的展示,更容易被人阅读,也更容易发现性能瓶颈以及相应的优化方向。

发表评论