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 在数据库的压测过程中,观察机器性能的主要内容,如果未能解决你的问题,请参考以下文章
sysbench对MySQL的压测,使用sysbench压测磁盘io