MySQL: 8 在数据库的压测过程中,观察机器性能

Posted 鮀城小帅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL: 8 在数据库的压测过程中,观察机器性能相关的知识,希望对你有一定的参考价值。

1. 观察机器性能的必要性

上一节中是使用10个线程去压测数据库,如果有性能更高的机器,那么就可以通过在sysbench中不停的增加线程的数量,比如使用20个线程,甚至100个线程去并发的访问数据库,知道发现数据库的QPS和TPS上不去了。

注意:在不停的压测获取更高的QPS和TPS时,还要同步对机器性能表现做观察。

之所以说要去观察机器性能,似乎因为一味的在压测过程中增加sysbench的线程数量,然后数据库勉强扛到了每秒5000的QPS了,但是这个时候就会发现机器的CPU已经满负荷运行了,内存使用率特别高,内存都快要不够了,然后网络带宽几乎被打满了,磁盘IO的等待时间特别长,这个时候说明机器已经到了极致了,再搞下去,机器都快挂了。

通过在压测的过程同时进行性能观察,可以知道,机器的CPU、内存、磁盘和网络在什么样的负载下是正常的,在什么样的负载下就是比较危险的。

2.压测时观察机器的CPU负载情况

top - 21:33:51 up 24 min,  2 users,  load average: 2.75, 4.09, 2.31

这行信息说明了当前机器的CPU负载情况,首先21:33:51指的是当前时间,up 24 min 指的是机器已经运行了多长时间, 2 users 就是说当前机器有2个用户在使用。

最重要的是load average: 2.75, 4.09, 2.31 这行信息,它说的是CPU在1分钟、5分钟、15分钟内的负载情况。

CPU负载的说明,假设当前是一个4核的CPU,此时如果你的CPU负载是0.15,这就说明,4核CPU中连一个核都没用满,4核CPU基本都很空闲。

如果你的CPU负载是1,那说明4核CPU有一个核已经被使用的比较繁忙了,另外3个核还是比较空闲一些。要是CPU负载是1.5,说明有一个核被使用繁忙,另外一个核也在使用,但是没那么繁忙,还有2个核可能还是空闲的。

如果你的CPU负载是4,那说明4核CPU都被跑满了,如果你的CPU负载是6,那说明4核CPU被繁忙的使用还不够处理当前的任务,很多进程可能一直在等待CPU去执行自己的任务。

以上就是CPU负载的概念和含义。

而我当前在进行压测的机器,它本身只有2核,从它的load average 来看,该CPU无论是最近1分钟、5分钟,亦或者是15分钟内的平均负载数值,都超过了2,也就是说当前的2个核都被跑满了,同时还有很多进程被挂起一直在等待CPU去执行自己的任务。

而这种情况是满负荷运转,或者说是超负荷的运转,此时不能继续提高线程的数量和增加数据库的QPS了,而是应该逐步降低线程的数量,让CPU负载降到合理的范围内 ,即 平均负载数值<=2

3.压测时观察机器的内存负载情况

在执行top命令之后,跳过中间几行内容,可以看到如下一行内容:

KiB Mem :  4030172 total,  2449324 free,   482656 used,  1098192 buff/cache

这里说的就是当前机器的内存使用情况。这里的单位是KB,可以看出总内存大概有4GB,已经使用了2.4GB多的内存,还有400多MB的内存是空闲的,然后有大概1GB左右的内存用作OS内核的缓冲区了。

对于内存而言,只要保持内存的使用率在70%以内,基本都还能接受。而70%~80%的使用率,说明已经有点危险了,此时就不能继续增加压测的线程数量和QPS了。这已经是临界值了。

4.压测是观察机器的磁盘IO情况

(1)安装 dstat 磁盘监控工具

yum -y install wget

(2)使用dstat命令

使用dstat命令,可以观察磁盘IO相关的指标,包括存储的IO吞吐量、IOPS这些。

(3)观察磁盘IO吞吐量

dstat -d

使用上面的命令,会看到如下的东西:

-dsk/total-
 read  writ
 387k 1097k
   0     0
   0    0

在上面可以清晰看到,存储的IO吞吐量是每秒钟读取387kb的数据,每秒写入1097kb的数据,像这个存储IO吞吐量基本上都不算多的,因为普通的机械硬盘都可以做到每秒钟上百MB的读写数据量。

(4)观察IOPS

dstat -r

使用上面的命令,可以看到如下的信息

--io/total-
 read  writ
12.4  27.4
   0     0
   0     0
   0  1.00

该信息的意思是读IOPS和写IOPS分别是多少,也就是说随机磁盘读取每秒钟多少次,随机磁盘写入每秒钟执行多少次。一般来说,随机磁盘读写每秒在两三百次都是可以承受的。

(5)如果磁盘IO吞吐量达到每秒上百MB,或者随机磁盘读写每秒达到极限的两三百次了,就不能继续增加线程数量了,否则磁盘IO负载就太高了。

5.压测时观察网卡的流量情况

使用 dstat -n 命令,可以看到如下的信息:

-net/total-
 recv  send
   0     0
  60B  214B
  60B  166B
  60B  166B

这个说的是每秒钟网卡接收到流量有多少kb,每秒钟通过网卡发送出去的流量有多少kb。如果机器使用的是千兆网卡,那么每秒网卡的总流量也就在100MB左右。

如果网卡传输流量已经到了极限值了,那么此时再怎么提高sysbench线程数量,数据库的QPS也上不去了,因为该机器每秒钟无法通过网卡传输更多的数据了。

6.总结

在硬件的一定合理的负载范围内,把数据库的QPS提高到最大,这就是数据库压测的时候最合理的一个极限QPS值。

以上是关于MySQL: 8 在数据库的压测过程中,观察机器性能的主要内容,如果未能解决你的问题,请参考以下文章

MySQL: 6 生产环境下的数据库服务器的压测指标

作为DBA,你不得不掌握的压测工具

sysbench对MySQL的压测,使用sysbench压测磁盘io

sysbench对MySQL的压测

Jmeter-----随机生成手机号后8位并去重,来进行注册手机号的压测

关于mysql的压测sysbench