3-1 什么是基准测试
测量系统性能,优化是否有效?MySQL基准测试。
定义:基准测试是一种测量和评估软件性能指标的活动,用于建立某个时刻的性能基准,以便当系统发生软硬件
变化时重新进行基准测试以评估变化对性能的影响。
基准测试:直接、简单、易于比较,用于评估服务器的处理能力。
压力测试:对真实的业务数据进行测试,获得真实系统所能承受的压力。
基准测试可能不关心业务逻辑,所使用的查询和业务的真实性可以和业务环境没关系。
基准测试的目的:
1、建立MySQL服务器的性能基准线
2、模拟比当前系统更高的负载,以找出系统的拓展瓶颈
3、测试不同的硬件、软件和操作系统配置是否配置正确
3-2 如何进行基准测试
对整个系统进行基准测试,能够测试整个系统的性能,包括web服务器缓存、数据库等。
能反映出系统中各个组件接口间的性能问题体现真实性能状况。
单独对MySQL进行基准测试
测试设计简单,所需耗费时间短。
MySQL基准测试的常见指标:
单位时间内所处理的事务数(TPS)
单位时间内所处理的查询数(QPS)
响应时间:平均、最小、最大、各时间所占百分比
并发量:同时处理的查询请求的数量。正在工作中的并发的操作数或同时工作的数量。
3-3 基准测试演示实例
计划和设计基准测试
准备基准测试及数据收集脚本,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 processlistG" >> $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; printf " %s %s %s %s",ts,$3,$4,substr($load,1,length($load)-1); prev_ts=ts; } /Queries/{ printf fmt,($2-Queries)/diff; Queries=$2 } ' "$@"
基准测试中容易忽略的问题
- 在单服务器上测试分布式应用,推荐:使用相同架构进行测试。
3-4 Mysql基准测试工具之mysqlslap
MySQL服务器自带的基准测试工具,随MySQL一起安装。
特点:可以模拟服务器负载,并输出相关统计信息。
可以指定也可以自动生成查询语句。
常用参数说明
3-5 Mysql基准测试工具之sysbench
安装说明
./autogen.sh
./configure --with-mysql-includes=/usr/local/mysql/include/--with-mysql-libs=/usr/local/mysql/lib/
make && make install
常用参数
3-6 sysbench基准测试演示实例
create database imooc;
grant all privileges on *.* to sbest@'localhost' identified by '123456';
exit
cd tests/db
ls
ls -1 *lua
show processlist