MySQL学习笔记(八)
除了QPS和TPS以外,我们还需要关注那些机器的性能
使用sysbench进行压测之后,就可以看到自己的数据库大概能抗下多少的QPS和TPS。
在之前压测中使用的线程数是10,如果机器的性能比较高,然后你觉得无法测试出机器的真实性能的话,可以正价sysbench的线程的数量,逐步增加线程数,知道发现数据库的QPS和TPS上不去了。当然在提高线程数的同事,不停的让数据库承载更大的QPS的时候,还需要配置多机器的性能表现的观察来做,不能盲目的增加线程去压测数据库。
在压测过程中,要根据机器的性能表现,从而决定是否要继续增加线程数去压测数据库
在不停增加线程数量的时候,需要密切关注哪些性能
假设数据库当前扛下了每秒2000的QPS,同时这个时候机器的CPU负载、内存负载、网络负载、磁盘IO负载,都在正常的范围内,负载相对较高一些,但是没有达到这台机器的极限的时候,我们认为这台数据库可以抗下2000的QPS,是没有问题的
如果数据库当前扛下了每秒5000的QPS的时候,但是此时的数据库已经到了5000个QPS了,这个时候你发现机器的CPU已经负荷运行,内存使用特别高,内存都不够了,机器网卡被打满了,磁盘IO的等待时间特别长,说明这个时候机器已经到了到了极致,继续下去机器都快挂了。
所以说在压测的过程中,在不停的增加sysbench的线程数量、持续的让机器承载的QPS更高,同时需要观察,机器的磁盘、IO、网络负载的情况,在硬件情况在比较正常的情况下,负载相对高一些,也是可以继续增加内存的数量和提高数据库的QPS的。
如果继续增加线程数,发现机器的磁盘、IO、CPU都已经到了一个临界的状态,此时就不能增加线程数继续压测了。
压测时如何观察机器的CPU的负载的情况
在linux中最常用的检测linux机器性能的命令,就是top命令,输入top命令的运行结果
首先第一行信息的意思是,首先11:37:25值得是当前时间 up 指的是机器运行的多少时间 user 指的是机器运行了多唱唱时间 1user 是指当前机器有一个用户在使用
最重要的 load average:指的是CPU在这1分钟、5分钟、15分钟内的负载的情况
CPU负载:假设我们有个四核的CPU,如果CPU的负载是0.15,就是说4核CPU中一个核都没用满,4核CPU很空闲。如果CPU的负载是1,那么就说明一个核已经使用的比较繁忙,其他3个核很空闲。如果在压测过程中CPU的load average已经基本达到了3.5、4的话,那么说明CPU的负载很高了,不要在增加测试的QPS了,否则CPU的负责过高也是不合理的。
压测时如何观察内存的使用情况
在上面有一个Mem的内容,这个就是表示的是内存中内存的使用情况。总共有2G的内存 1.1个G用于OS Cache、已经使用了600M的内存,150M左右的内存时空闲的。
对于内存而言,一般来说内存的使用率最好在80%以内,基本都还能接受,如果机器的内存在70-80了,说明优点危险了,不要在增加压测的线程数量和QPS了。
压测是如何观察机器的磁盘IO的情况
使用dstat命令。apt install dstat 安装软件
dstat -d 可以看到以下结果:
可以看到,存储的IO吞吐量是每秒钟读取3357B的数据,每秒写入18K的数据,像这个存储IO吞吐量都不算多,因为普通的机械硬盘都可以达到上百MB的读写数据量。
使用dstat -r,可以看到以下信息
它的意思是每秒读IOPS和写IOPS分别是多少,也就是随机磁盘读取每秒多少次,一般随机磁盘读写在两三百次都是可以的
所以在这里,我们就需要在压测的时候密切观察机器的磁盘IO的情况,如果磁盘IO吞吐量太高了,或者随机磁盘读写已经达到极限的两三百次了,此时就不需要在增加线程的数量了,否则IO负载就太高了。
观察网卡的流量情况
通过dstat-n 命令
这个说的是每秒中网卡接收到的流量有多少,发出去的流量有多少,通常来说,如果机器使用的千兆网卡,那么网卡的总流量也就在100MB左右,甚至更低一些。
我们在做压测的时候也需要观察考网卡的情况,如果网卡传输流量已经达到了极限值,此时如果提高线程数量,数据库的QPS也上不去了,因为这台机器每秒钟无法通过网卡传输更多的数据了。
总结
在数据库的压测过程中,必须不停的正价sysbench的线程数量,增加数据库抗下的QPS,通过通过各种命令观察机器CPU、内存、磁盘和网络的负载情况,如果其中的某个硬件的负载已经很高了,此时就可以不再提高数据库的QPS了。
过通过各种命令观察机器CPU、内存、磁盘和网络的负载情况,如果其中的某个硬件的负载已经很高了,此时就可以不再提高数据库的QPS了。
在硬件的一定的合理范围内,把数据库的QPS搞到最大,这就是数据库压测的时候最合理的一个极限的QPS的值。