1. QPS和TPS

在对数据库进行压测是,最终要看的是该数据库在现有的机器配置下,每秒可以抗下多少个请求?使用专业术语,就是QPS和TPS。

QPS,全称 Query Per Second.

QPS就是说,你的这个数据库每秒可以处理多少个请求。可以理解为,一次请求就是一条SQL语句,也就是说这个数据库每秒可以处理多少个SQL语句。

在Java系统或者中间件系统进行压测时,该QPS也可以使用,代表每秒可以处理多少个请求。

TPS,全称 Transaction Per Second。

TPS,就是每秒可以处理的事务量,这个TPS往往数据库中用的较多一些。其主要说的是数据库每秒会处理多少次事务提交或者回滚。

所谓事务,一个事务会包含一个或多个SQL语句,这些SQL最好要么一起成功了,那就是事务提交;要么一起失败了,那就是事务回滚。这就是事务。根据底层原理,其实就是第7步的commit提交成功与否。

而TPS往往指的是一个数据库每秒里有多少个事务执行完毕了,事务提交或者回滚都算是事务执行完毕了,所以TPS衡量的是一个数据库每秒处理完的事务的数量。

2.IO相关的压测性能指标

(1)IOPS

IOPS,指的是机器的随机IO并发处理的能力,比如机器可以达到200 IOPS,意思就是说每秒可以执行200个随机IO读写请求。

在数据库底层架构中,你写入到内存中更新的脏数据,最后都会由后台IO线程在不确定的时间,刷回到磁盘里去,这就是随机IO的过程。如果说IOPS指标太低了,那么就会导致你内存里的脏数据刷回磁盘的效率不高。

(2)吞吐量

吞吐量,指的是机器的磁盘存储每秒可以读写多少字节的数据量。

在数据库底层架构中,在执行各种SQL语句的时候,提交事务的时候,其实都是大量的会写redo log之类的日志的,这些日志都会直接写磁盘文件。

所以一台机器它的存储每秒可以读写多少字节的数据量,就决定了他每秒可以把多少redo log的日志写入到磁盘里去。一般来说我们写redo log之类的日志,都是对磁盘文件进行顺序写入的,也就是一行接着一行的写,不会是进行随机的读写,那么一般普通磁盘的顺序写入的吞吐量每秒都可以达到200MB左右。

(3)latency

latency,该指标指的是往磁盘里写入一条数据的延迟。

在数据库底层架构中,我们执行SQL语句和提交事务的时候,都需要顺序写redo log磁盘文件,所以此时你写一条日志到磁盘文件里去,到底是延迟1ms,还是延迟100us,这就对你的数据库的SQL语句执行性能是有影响的。

一般来说,当然是你的磁盘读写延迟越低,那么你的数据库性能急剧越高,你执行每个SQL语句和事务的时候速度就会越快。

3.其他的性能指标

(1)CPU负载,CPU负载是一个很重要的性能指标。当CPU负载特别高是,就说明你的数据库不能继续往下压测更高的QPS了,否则CPU是吃不消的。

(2)网络负载:主要看当前的机器带宽情况下,在压测到一定的QPS和TPS的时候,每秒钟机器的网卡会输入多少MB数据,会输出多少MB数据,因为有可能你的网络带宽最多每秒传输100MB的数据,那么可能你的QPS到1000的时候,网卡就打满了,已经每秒传输100MB的数据了,此时即使其他指标都还算正常,但是你也不能继续压测下去了。

(3)内存负载:指在压测到一定情况下的时候,你的机器内存耗费了多少,如果说机器内存耗费过高了,说明也不能继续压测下去了。