背景
最近着迷于性能测试,遂学习一把压测神器sysbench
sysbench是github上开源的项目
链接地址:https://github.com/akopytov/sysbench
通用安装方法
1.clone and download选择copy URL
2.cd /tmp --> Centos终端输入git clone https://github.com/akopytov/sysbench.git
3.按照README.MD中源码安装指导一步步操作即可。
yum -y install make automake libtool pkgconfig libaio-devel
yum -y install mariadb-devel
./autogen.sh
./configure
make -j
make install
sysbench测试I/O
关键词:随机产生数据,测试不同磁盘,在不同磁盘目录下执行命令
准备阶段:sysbench --test=fileio --num-threads=4 --file-total-size=10G --file-test-mode=rndrw prepare
压力测试阶段:sysbench --test=fileio --num-threads=4 --file-total-size=10G --file-test-mode=rndrw run
清理数据阶段:sysbench --test=fileio --num-threads=4 --file-total-size=10G --file-test-mode=rndrw cleanup
基础名称解析==压测要关注什么
TPS:Transactions Per Second,每秒传输的事务处理个数。这是指服务器每秒处理的事务数,是支持事务的存储引擎特有的一个性能指标。
QPS:Queries Per Second,每秒查询处理量,适用大多数存储引擎。
tpmC:Transactions Per Minute,每分钟处理的交易量,等同于TPS,是TPC-C的测试指标(tpcc-mysql)。
iops:每秒磁盘进行的I/O操作次数
iowait:一个采样周期内有百分之几的时间处于:CPU空闲、并且有仍未完成的I/O请求
svctm:设备处理请求的平均时间(ms)。指的是读写请求脱离linux内核调度,进入设备读写阶段所耗时间。
%util:可以简单的理解为:单位时间内,设备繁忙比。比如,10秒钟,有6秒在进行读写,则util = 60%。
每秒I/O字节数(I/O吞吐)
事务响应时间
I/O设备提供的设备级别IOPS、读写延时数据
一般要关注的指标
response time avg:平均响应时间
TPS and OPS
系统层面的cpu、io、mem相关指标
如何判定哪个测试模式性能更好
如果两次tps/tpmC一样,那么谁的事务响应时间、iowait、svctm、%util、读写延时更低,就是谁更好
mysql压测举例
sysbench /tmp/sysbench/src/lua/oltp_read_write.lua \
--mysql-host=127.0.0.1 --mysql-port=3306 \
--mysql-user=sysbench --mysql-password=sysbench \
--mysql-db=sbtest --tables=10 --table-size=100000 --threads=1 \
--report-interval=10 --rand-type=uniform --max-time=300 \
--max-requests=0 --percentile=99 prepare/run/cleanup
结果指定到文件:
run >>./log/sysbench_oltpX_20180313.log
参数解释:
./src/lua/oltp_read_write.lua 表示调用本脚本进行oltp模式测试
--mysql-db=sbtest 表示指定测试库
--tables=10 表示生成10个测试表
--table-size=100000 表示每个测试表填充数据量为100000
run模式的参数:
--threads=1 表示发起1个并发连接
--report-interval=10 表示每10秒输出一次测试进度报告
--rand-type=uniform 表示随机类型为固定模式
--max-time=300 表示最大执行时长300秒
--max-requests=0 表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长
--percentile=99 表示设定采样比例,默认是 95%;即丢弃1%的长请求,在剩余的99%里取最大值
压测三部曲
prepare:准备阶段,准备数据
run:压测执行
cleanup:压测后马上清理数据
每次压测后要做什么
每轮测试完成后,都重启mysqld实例,并且用下面的方法删除系统cache,释放swap(如果用到了swap的话),甚至可以重启整个OS
shell> sync --将脏数据刷新到磁盘
shell> echo 3 > /proc/sys/vm/drop_caches --清楚OS Cache
shell> swapoff -a && swapon -a
出图
安装windows客户端,用于出图
软件:gp507-win64-mingw
下载url:https://jaist.dl.sourceforge.net/project/gnuplot/gnuplot/5.0.7/gp507-win64-mingw.exe
举例:
plot ‘C:\Users\limin\Downloads\20180314.log‘ using 7 with linespoint title ‘vm1-TPS‘,
‘C:\Users\limin\Downloads\20180314-10.log‘ using 7 with linespoint title ‘vm2-TPS‘
原文地址:http://blog.51cto.com/leesir/2086369