如何调查MySQL吞吐量的高峰?

最近我们的一台服务器耗尽了内存,崩溃了。 在回顾了munin图之后,似乎在崩溃之前达到峰值的唯一指标(内存使用除外)就是MySQL throughput 。 但是我们期待看到MySQL queries数量没有发生相应的增加:

在这里输入图像说明

在这里输入图像说明

另外从下图中可以看出, MySQL throughput达到了一个exception高的值,远远没有达到任何其他值:

在这里输入图像说明

我们完全处于黑暗中,应该如何进行,因此下面的问题是:

如何对MySQL吞吐量增加进行“事后调查”?

一个巨大的结果集的查询会导致一个这样的尖峰,没有看到相应的增加的查询量。 你有任何磁盘I / O监控? 如果这是由查询引起的,那么也应该有一个很大的高峰。

不幸的是,如果没有general_log ,一个事后检查是很困难的。 错误日志将不会显示成功执行的查询。

outlook未来,我所做的尝试和解决这些问题是保持一个查询日志的窗口。 启用general_log并设置logrotate以保留查询的简要历史logging。 如果性能密集的话,你也可以尝试使用像mk-query-digest这样的工具和tcpdump一起来捕获查询。