sysbench应该是使用最广泛的MySQL性能压测工具, 通常产生的压测报告绘图使用 excel 或 gnuplot 来绘制的;但用excel 生成图表得手工黏贴数据再配置图表,而用gnuplot得写个配置文件,都有些繁琐;最近逛 github 发现graph-cli这个画图工具,能从 csv 文件里生成图片,遂捣鼓了下和sysbench 怎么配合使用~
绘图 1--横坐标是线程数,纵坐标是 qps 值
假设压测线程数是 1、8、16、32、64、128,对应的文件分别是 sb[1~8].log,先用如下命令生成 csv 文件:
cat sb*log | egrep " cat|threads:|queries:" | tr -d "\n" | sed 's/Number of threads: /\n/g' | sed 's/\[/\n/g' | sed 's/[A-Za-z\/]\{1,\}://g'| sed 's/ \.//g' | awk {'print $1 $3'} | sed 's/(/,/g' | sort -g| grep -v '^$' |sed '1i threads,cstat_on_qps' > cstat_on_qps.csv
产生的cstat_on_qps.csv
内容会是这个样子
threads,cstat_on_qps
1,2796.03
8,18799.03
16,30722.64
32,42044.25
64,51911.20
128,57427.69
再使用 graph-cli画图
graph cstat_off_qps.csv -T read_write -o read_write.png
最后效果如下
绘图 2--多个测试场景对比图
像上面那样单一数据绘图还是比较少见的,大部分绘制的是对比图,譬如 MySQL 不同版本的对比图、新老硬件性能的对比图;可以这样生成:
graph cstat_off.csv -s --chain | graph physics.csv -s -T read_write -o read_write.png
cstat_off.csv
和physics.csv
分别是 MySQL 在c-state关闭、不关闭情形下的压测数据, csv还是按照第一个绘图例子的命令生成;最终效果如下:
当然也可以更多的数据组合,譬如这样:
绘图 3--按时间绘制
有时我们想看 MySQL 长时间的压测是否有性能抖动, 可以按照时间轴来绘制:
grep 'thds:' sb_test.log | cut -d ' ' -f 2,9 | sed 's/ /,/g'| sed '1i time,cstat_on_qps' > qps_trend.csv
样本数据如下:
time,cstat_on_qps
1s,52826.22
2s,53053.49
3s,51781.75
4s,52301.09
5s,54180.96
6s,46002.01
7s,45567.34
8s,40647.22
9s,42120.07
10s,45959.82
11s,46372.70
12s,45708.86
13s,46581.92
14s,46930.91
15s,46604.24
16s,45604.54
17s,46088.76
18s,45702.33
19s,46750.68
20s,46914.81
21s,47485.07
22s,44935.59
23s,38392.21
24s,36965.36
25s,46108.86
26s,46813.07
......
同样生成图表:
graph -s qps_trend.csv -T qps_trend
从图就能很直观看出性能抖动随时间变化还是蛮大的~