MySQL压测相关内容
1、机器配置与相关概念
- 4核8G : 每秒500个请求
- 8核16G : 1000~2000
- 16核32G :3000~4000
当然你也要考虑你请求耗时
2、IO相关的性能指标
- IOPS:机器随机IO并发处理的能力,内存中更新的数据会由线程在不确定的时间刷入磁盘中,这就是随机IO的过程。如果你的IOPS过低,会导致内存中刷入磁盘的效率不够高
- 吞吐量:机器的磁盘每秒可以读写多少节点的数据量,提交事务的时候,会把大量的redo log日志刷入磁盘,所以吞吐量就决定了每秒可以写入多少redo log,redo log是顺序写入的。一般磁盘的吞吐量可以达到每秒200M
- latency :往磁盘写入一条数据的延迟
3、压测的时候要关注的其他性能指标
- CPU负载:假设你压测的时候每秒可以处理3000个请求,可能其他的性能指标都正常,但是CPU负载过高,那么说明数据库不能压测更高的QPS了,否则CPU会吃不消
- 网络负载:观察机器带宽,在压测一定的QPS和TPS的时候,每秒钟机器的网卡输入多少MB数据,输出多少数据,网卡打满的话说明你的压测不能继续了
- 内存负载:如果机器内存消耗过高,那么你的压测也停止了
4、压测工具sysbench
- linux安装sysbench
- 测试命令:
- 压测完成后可执行clean up指令:sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=slp --mysql-password=Lll001972 --mysql-db=tpl_system --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable cleanup
- 压测完成后,会有压测报告出现,我的服务器宕机了,法克,commback
-
[ 81s ] thds: 10 tps: 8.99 qps: 204.88 (r/w/o: 145.92/39.98/18.99) lat (ms,95%): 995.51 err/s: 0.00 reconn/s: 0.00
参数表示10线程,每秒tps:9,qps:204(读/写/其他),95%的请求在995ms之内,每秒由0个请求是失败的,发生0次网络重连
5、压测时如何观察机器的CPU负载情况
最最常用的监测linux机器性能的命令,就是top命令
top - 15:52:00 up 42:35, 1 user, load average: 0.15, 0.05, 0.01
先来解释一下这行信息,这行信息是最直观可以看到机器的cpu负载情况的,首先15:52:00指的是当前时间,up 42:35指的是机器已经运行了多长时间,1 user就是说当前机器有1个用户在使用。最重要的是load average: 0.15, 0.05, 0.01这行信息,他说的是CPU在1分钟、5分钟、15分钟内的负载情况。这里要给大家着重解释一下这个CPU负载是什么意思,假设我们是一个4核的CPU,此时如果你的CPU负载是0.15,这就说明,4核CPU中连一个核都没用满,4核CPU基本都很空闲,没啥人在用。依次类推
6、内存负载
MiB Mem : 1830.0 total, 67.8 free, 1460.3 used, 302.0 buff/cache
7、压测时如何观察机器的磁盘IO情况?
dstat -d命令、dstat -r命令
8、压测时观察网卡的流量情况
dstat -n命令
9、数据库可视化监控和报表
Prometheus + Grafana