1、什么是基准测试?
基准测试是一种测量和评估软件性能指标的活动。用于建立某个时刻的性能基准,以便当系统发生软硬件变化时重新进行基准测试以评估变化对性能的影响。
基准测试是针对系统设置的一种压力测试。
![](https://i-blog.csdnimg.cn/blog_migrate/f44ae8efb40de6d3a0676743716a4fc0.png)
. 压力测试需要针对不同的主题,所使用的的数据和查询也是真实用到的。
. 基准测试可能不关心业务逻辑,所使用的查询和业务的真实性可以和业务环境没关系。
2、基准测试的目的
(1) 建立MySQL服务器的性能基准线,确定当前MySQL服务器运行情况。
(2) 模拟比当前系统更高的负载,以找出系统的扩展瓶颈。增加数据库并发,观察QPS,TPS变化,确定并发量与性能最优的关系。
(3) 测试不同的硬件、软件和操作系统配置。
(4) 证明新的硬件系统设备是否配置正确。
3、如何进行基准测试
(1) 对整个系统进行基准测试。
从系统入口进行测试(如网站Web前端,手机APP前端)。
优点:
. 能够测试整个系统的性能,包括web服务器、缓存、数据库等。
. 能反映出系统中各个组件接口间的性能问题,体现真实性能状况。
缺点:
. 测试设计复杂,消耗时间长。
(2) 单独对MySQL进行基准测试
优点:
. 测试设计简单,所需耗费时间短。
缺点:
. 无法全面了解整个系统性能的基准线。
4、MySQL基准测试的常见指标
(1) 单位时间内所处理的事务数(TPS)。
(2) 单位时间内锁处理的查询数(QPS)。
(3) 响应时间。
(4) 并发量:同时处理的查询请求的数量。
正在工作中的并发的操作数或同时工作的数量。
5、基准测试的步骤
(1) 计划和设计基准测试
. 对整个系统还是某一组件
. 使用什么样的数据
. 准备基准测试及数据收集脚本
CPU使用率、IO、网络流量、状态与计数器信息等。
Get_Test_info.sh
|
#!/bin/bash
INTERVAL=5
PREFIX=/home/imooc/benchmarks/$INTERVAL-sec-status
RUNFILE=/home/imooc/benchmarks/running
echo "1" > $RUNFILE
MYSQL=/usr/local/mysql/bin/mysql
$MYSQL -e "show global variables" >> mysql-variables
while test -e $RUNFILE; do
file=$(date +%F_%I)
sleep=$(date +%s.%N | awk '{print 5 - ($1 % 5)}')
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" >> $PREFIX-${file}-innodbstatus &
echo "$ts $loadavg" >> $PREFIX-${file}-processlist
$MYSQL -e "show full processlist\G" >> $PREFIX-${file}-processlist &
echo $ts
done
echo Exiting because $RUNFILE does not exists
-
|
. 运行基准测试
. 保存及分析基准测试结果
analyze.sh
|
#!/bin/bash
awk '
BEGIN {
printf "#ts date time load QPS";
fmt=" %.2f";
}
/^TS/ {
ts = substr($2,1,index($2,".")-1);
load = NF -2;
diff = ts - prev_ts;
|