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=5PREFIX=/home/imooc/benchmarks/$INTERVAL-sec-status
RUNFILE=/home/imooc/benchmarks/running
echo"1" > $RUNFILEMYSQL=/usr/local/mysql/bin/mysql$MYSQL -e "show global variables" >> mysql-variableswhile test -e $RUNFILE; dofile=$(date +%F_%I)
sleep=$(date +%s.%N | awk '{print 5 - ($1 % 5)}')
sleep$sleepts="$(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$tsdone
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"\n%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