Mysqlbench服务器性能指标含义

对一个DBA来说监控mysql服务器的性能指标是非常重要的。我们可以通过mysqlbench中的Server Status来轻松监测服务器最近一段时间的状态。但是这些指标具体代表了什么含义?比如,Selects per secondInnodb reads per second的区别是什么?如何评估服务器当前写入的性能?

下图展示了一个运行中的服务器性能状态: mysqlbench server status

mysql服务器性能指标含义

找到了一篇很好的文章 : Selects per second: Com_select / second Innodb reads per second: Innodb_data_reads / second InnoDB writes per second: Innodb_data_writes / second

好了,那 Innodb_data_readsInnodb_data_writes的定义又是什么? mysql官方文档解释: Innodb_data_reads: The total number of data reads (OS file reads). Innodb_data_writes: The total number of data writes.

不同指标之间的关系

Selects per second与Innodb reads per second

mysqlbench high selects low reads

与文章开头的图相比,有一个很有意思的现象:虽然Selects per second远比之前高(20199和7060),但Innodb reads per second几乎为0。原因在于后者的大部分数据已经读进了内存,或者说InnoDB Buffer,这些selects已经不再需要文件IO进行读取了,此时的e2e延迟也远低于前图所示的情况。

通过这个例子可以看出Selects per secondInnodb reads per second不相等也没有正比关系。也可以通过查看Innodb Buffer Usage进一步验证这个猜想,后者Buffer所占的内存显著高于前者,说明热门数据都已经在Buffer中,无须文件IO读取。

相比而言,Innodb writes per second可以直接反映DB的写入性能了,因为Buffer对写入操作并不起作用。

DB刚启动时IO/内存的关系

进一步考虑如下情况,在DB刚启动时大部分查询延迟是比较高的,但在DB运行一段时间之后,查询延迟会慢慢降低,原因在于InooDB Buffer Pool会cache运行期间的索引和数据。 What's innodb buffer usage

mysql startup

上图是一个实际的展示,开始IO比较高,内存使用率很低; 一小时之后,IO使用率显著降低,内存使用率升高,同时CPU利用率也升高,查询延迟降低。