目录
2.1 为什么需要基准测试
基准测试可以观察系统在不同压力下的行为,评估系统的容量。场景包括但不限于:
- 验证基于系统的一些假设
- 重现系统中的某些异常行为
- 测试系统当前的运行情况
- 模拟比当前系统更高的负载,以找出系统随着压力增加而可能遇到的扩展性瓶颈
- 规划未来的业务增长
- 测试应用适应可变环境的能力
- 测试不同硬件、软件和操作系统配置
2.2 基准测试的策略
集成式(full-stack):针对整个系统的整体测试
单组件式(single-component):针对mysql测试
2.3 测试指标
吞吐量、响应时间或延迟、并发性、可扩展性
2.4 获取系统性能和状态
#! /bin/sh
INTERVAL = 5
PREFIX = $INTERVAL-sec-status
RUNFILE = /home/benchmarks/running
mysql -e 'SHOW GLOBAL VARIABLES' >> mysql-variables
while test -e $RUNFILE; do
file=$(date +%F_%I)
sleep=$(date +%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}")
sleep $sleep
ts="$(date + "TS %s.%N %F %T")"
loadavg="$(uptime)"
echo "$ts $loadavg" >> $PREFIX-${file}-status
mysql -e 'SHOW GLOBAL STATUS' >> $PREFIX-${file}-status &
echo "$ts $loadavg" >> $PREFIX-${file}-innodbstatus
mysql -e 'SHOW ENGINE INNODB STATUS\G' >> $PREFIX-${file}-innodbstatus &
echo "$ts $loadavg" >> $PREFIX-${file}-processlist
mysql -e 'SHOW FULL PROCESSLIST\G' >> $PREFIX-${file}-processlist &
echo $ts
done
echo Exiting beacause $RUNFILE does not exist.
2.5 常用基准测试工具及案例
2.5.1 集成式测试工具
- ab:Apache HTTP服务器基准测试工具。它可以测试HTTP服务器每秒最多可以处理多少请求。只能针对单个url进行压力测试。
- http_load:和ab类似
- ⭐️JMeter:可以测试web应用、数据库查询测试等
2.5.2 单组件式测试工具
- 🌟sysbench:多线程系统压测工具。不仅可以用来测试数据库的性能,也可以测试运行数据库的服务器性能。
# cpu基准测试
sysbench --test=cpu --cpu-max-prime=20000 run
#I/O基准测试
#1.创建一个数据集
sysbench --test=fileio --file-total-size=150G prepare
#2.针对不同I/O类型测试:seqwr(顺序写入)、seqrewr(顺序重写)、seqrd(顺序读取)、rndrd(随机读取)、rndwr(随机写入)、rndrw(混合随机读/写)
sysbench --test=fileio --file-total-size=150G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run
#3.清除测试文件
sysbench --test=fileio --file-total-size=150G cleanup
#OLTP基准测试:模拟一个简单的事务处理系统的工作负载(8个并发线程,只读模式,测试时长60s)
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root prepare
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run