Mysqlbench服务器性能指标含义
对一个DBA来说监控mysql服务器的性能指标是非常重要的。我们可以通过mysqlbench中的Server
Status来轻松监测服务器最近一段时间的状态。但是这些指标具体代表了什么含义?比如,Selects per second
和Innodb reads per second
的区别是什么?如何评估服务器当前写入的性能?
下图展示了一个运行中的服务器性能状态:
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_reads
和Innodb_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
与文章开头的图相比,有一个很有意思的现象:虽然Selects per second
远比之前高(20199和7060),但Innodb reads per second
几乎为0。原因在于后者的大部分数据已经读进了内存,或者说InnoDB
Buffer,这些selects已经不再需要文件IO进行读取了,此时的e2e延迟也远低于前图所示的情况。
通过这个例子可以看出Selects per second
和Innodb 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
上图是一个实际的展示,开始IO比较高,内存使用率很低; 一小时之后,IO使用率显著降低,内存使用率升高,同时CPU利用率也升高,查询延迟降低。