MySQL绘图的重要性

作者:港云互联 时间:2019-09-28

        如果你想要统治世界,就必须不断地利用“阴谋”注。而最简单有效的图形,就是将性能指标按照时间顺序绘制。通过图形可以立刻发现一些问题,而这些问题在原始数据中却很难被注意到。或许你会坚持看测试工具打印来的平均值或其它汇总过的信息,但平均值有时候是没有用的,它会掩盖掉一些真实情况。幸运的是,前面写的脚本的输出都可以定制作为gnuplot或者R绘图的数据来源。假设使用gnuplot,假设输出的数据文件名是QPS-per-5-seconds :


        gnuplot> plot"QPS-per-5-seconds"   using  5  w  lines   title   "QPS"


        该gnuplot命令将文件的第五列qps数据绘成图形,图的标题是QPS。图2-2是绘制出来的结果图。

MySQL绘图

图2-2:基准测试的QPS图形


        下面我们讨论一个可以更加体现图形价值的例子。假设MySQL数据正在遭受“疯狂刷新(furious flushing)”的问题,在刷新落后于检查点时会阻塞所有的活动,从而导致吞吐量严重下跌。95%的响应时间和平均响应时间指标都无法发现这个问题,也就是说这两个指标掩盖了问题。但图形会显示出这个周期性的问题,请参考图2-3。


        图2-3显示的是每分钟新订单的交易量(NOTPM, new-order transactions per minute)。从曲线可以看到明显的周期性下降,但如果从平均值(点状虚线)来看波动很小。一开始的低谷是由于系统的缓存是空的,而后面其他的下跌则是由于系统刷新脏块到磁盘导致。如果没有图形,要发现这个趋势会比较困难。

MySQL绘图



图2-3: 一个30分钟的dbt2测试的结果


        这种性能尖刺在压力大的系统比较常见,需要调查原因。在这个案例中,是由于使用了旧版本的InnoDB引擎,脏块的刷新算法性能很差。但这个结论不能是想当然的,需要认真地分析详细的性能统计。在性能下跌时,SHOW ENGINE INNODB STATUS的输出是什么?SHOw FULL PROCESSLIST 的输出是什么?应该可以发现InnoDB在持续地刷新脏块,并且阻塞了很多状态是"waiting on query cache lock"的线程,或者其他类似的现象。在执行基准测试的时候要尽可能地收集更多的细节数据,然后将数据绘制成图形,这样可以帮助快速地发现问题。




新人注册,即送价值满880元现金劵

立即注册>>
客服 电话 反馈 活动 回顶部

服务热线

+852-5764-9835

1对1贴心服务,7X24小时热线