如何使用sysbench对MySQL实施压力测试
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,下面一起来了解下如何使用sysbench对MySQL实施压力测试,相信大家看完肯定会受益匪浅,文字在精不在多,希望如何使用sysbench对MySQL实施压力测试这篇短内容是你想要的。1.背景出自pe
千家信息网最后更新 2025年11月08日如何使用sysbench对MySQL实施压力测试
下面一起来了解下如何使用sysbench对MySQL实施压力测试,相信大家看完肯定会受益匪浅,文字在精不在多,希望如何使用sysbench对MySQL实施压力测试这篇短内容是你想要的。
1.背景
出自percona公司,是一款多线程系统压测工具,可以根据影响数据库云服务器性能的各种因素来评估系统的性能。例如,可以用来测试文件IO,操作系统调度器,内存分配和传输速度,POSIX线程以及数据库云服务器等。sysbench支持Lua脚本语言,Lua对各种测试场景的设置可以非常灵活。sysbench支持MySQL,操作系统和硬件的测试。
2.安装与使用
安装:
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bashsudo yum -y install sysbench使用:
数据准备
#!/bin/shexport LD_LIBRARY_PATH=/usr/local/mysql/lib/. ~/.bash_profile# 需要启用DEBUG模式时将下面三行注释去掉即可#set -u#set -x#set -eBASEDIR="/data/sysbench" #创建sysbench文件目录if [ ! -d $BASEDIR ]then mkdir $BASEDIR -pficd $BASEDIR #进入sysbench文件目录# 记录所有错误及标准输出到 sysbench.log 中#exec 3>&1 4>&2 1>> sysbench_prepare.log 2>&1DBIP=192.168.1.109DBPORT=3109DBUSER='proxysql'DBPASSWD='123456'NOW=`date +'%Y%m%d%H%M'`DBNAME="sysbench"TBLCNT=10 #表数量WARMUP=300 #预热时间(秒)DURING=1800 #持续时间(秒)ROWS=10000000 #每个表中插入1KW行数据MAXREQ=1000000 #最大请求数为100W#当达到持续时间或者最大请求数时,这一轮的测试就会停止#创建sysbench专用的数据库echo 'now create db'mysql -h$DBIP -P$DBPORT -u$DBUSER -p$DBPASSWD -e 'create database sysbench'echo 'create ok'## 数据准备echo 'now prepare data' sysbench /usr/share/sysbench/oltp_read_only.lua \ #必须附加lua脚本才可以初始化数据 --mysql-host=$DBIP \ --mysql-port=$DBPORT \ --mysql-user=$DBUSER \ --mysql-password=$DBPASSWD \ --mysql-db=$DBNAME \ --db-driver=mysql \ --tables=10 \ --table-size=$ROWS \ --time=$DURING prepare压测开始
#!/bin/bash###### 叶金荣, 知数堂培训联合创始人, 资深MySQL专家, MySQL布道师, Oracle MySQL ACE#### 几个注意事项:## 1、运行sysbench的客户机和MySQL DB云服务器尽量不要在同一台主机上,也包括一台宿主机上启动两个虚机的情形;## 2、测试表的数量不宜太少,至少要求20个表以上;## 3、每个表的数据量不宜太少,通常至少要求1千万以上,当然了,也要根据DB云服务器的配置适当调整;## 4、每次进行基准压测的时长不宜过短,通常要求持续15分钟以上;## 5、每轮测试完毕后,中间至少暂停5分钟,或者确认系统负载完全恢复空跑状态为止;## 6、测试DB云服务器要是专用的,不能和其他业务混跑,否则测试结果就不靠谱了;## 7、其余未尽事宜,后续再行补充。#### created by yejinrong@zhishutang.com## 2017/6/3#### sysbench项目地址: https://github.com/akopytov/sysbench######################### 2018/02/23 张锐志 #######################################叶老师原脚本仅适用于sysbench 0.5版本,sysbench升级到1.0后无法使用,现修改部分语法。export LD_LIBRARY_PATH=/usr/local/mysql/lib/. ~/.bash_profile# 需要启用DEBUG模式时将下面三行注释去掉即可#set -u#set -x#set -eBASEDIR="/data/sysbench"if [ ! -d $BASEDIR ]then mkdir $BASEDIR -pficd $BASEDIR#清理之前的遗留记录rm -rf $BASEDIR/logs*# 记录所有错误及标准输出到 sysbench.log 中exec 3>&1 4>&2 1>> sysbench.log 2>&1#时间单位秒DBIP=192.168.1.109DBPORT=3109DBUSER='proxysql'DBPASSWD='123456'NOW=`date +'%Y%m%d%H%M'`DBNAME="sysbench"REPORT_INTERVAL=1TBLCNT=10 #表数量WARMUP=300 #预热时间(秒)DURING=1800 #持续时间(秒)ROWS=10000000 #每个表中插入1KW行数据MAXREQ=1000000 #最大请求数为100W#当达到持续时间或者最大请求数时,这一轮的测试就会停止# 并发压测的线程数,根据机器配置实际情况进行调整THERAD_NUMBER="8 64 128"#初始次数round=0# 一般至少跑3轮测试,我正常都会跑10轮以上while [ $round -lt 4 ]do#每回合日志位置:rounddir=$BASEDIR/logs-round${round}mkdir -p ${rounddir}for thread in `echo "${THERAD_NUMBER}"`do#常用可选项:#oltp_read_only #只读#oltp_read_write #读写兼有#oltp_update_non_index #无主键更新情形sysbench /usr/share/sysbench/oltp_read_only.lua \ --mysql-host=$DBIP \ --mysql-port=$DBPORT \ --mysql-user=$DBUSER \ --mysql-password=$DBPASSWD \ --mysql-db=$DBNAME \ --db-driver=mysql \ --tables=$TBLCNT \ --table-size=$ROWS \ --report-interval=$REPORT_INTERVAL \ --threads=${thread} \ --rand-type=uniform \ #数据随机类型:uniform,均匀的 --time=$DURING run >> ${rounddir}/sysbench_${thread}.logsleep 300 #不同的线程数压测之间停顿5分钟doneround=`expr $round + 1`sleep 300 #每轮压测之间停顿5分钟done运行完毕后在预设的数据目录下可以找到sysbench输出的日志。
3.结果分析与绘图
可以直接阅读sysbench日志给出的总结,也可以对其中个别项的数据进行绘图观察趋势。
SQL statistics: queries performed: read: 142870 write: 0 other: 20410 total: 163280 transactions: 10205 (5.66 per sec.) queries: 163280 (90.53 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.)General statistics: total time: 1803.6625s total number of events: 10205Latency (ms): min: 3113.18 avg: 11303.55 max: 24222.47 95th percentile: 16819.24 sum: 115352747.29Threads fairness: events (avg/stddev): 159.4531/1.51 execution time (avg/stddev): 1802.3867/1.03#我使用的是硬件资源十分有限的虚拟机,压测结果有点扎心。安装gnuplot进行绘图,gnuplot需要图形环境,可以选择在windows上安装,也可以在施压客户机上安装图形界面。这里选择在linux施压客户机上安装图形界面。
dnf -y install @xfce-desktop #安装图形界面yum -y install gnuplot #安装gnuplotgnuplot #进入gnuplot终端gnuplot>plot 'output/sysbench_8.log' using 9 w lines title 'QPS' #using 5 表示使用第5列数据作图 #with lines 定义图中的趋势使用线来表示 #title 'QPS' 定义线的名称 #使用,(逗号)分割,进行多列数据的绘制图形如下:
通过其他脚本观察sysbench压测过程中的系统信息和数据库信息(来源于《高可用 MySQL》)
#!/bin/sh#开始前获取全局配置参数#每五秒获取一次cpu load,MySQL全局信息,InnoDB引擎相关信息,线程信息 INTERVAL=5PREFIX=$INTERVAL-sec-statusRUNFILE=/root/runningmysql -e 'show global variables'>>mysql-variables#通过检测 /root/running文件是否存在作为是否进行获取信息的依据,可以在压测结束时删除此文件停止收集while test -e $RUNFILE; do file=$(date +%F_%H) sleep=$(date +%s.%N |awk "{print $INTERVAL -(\$1 % $INTERVAL)}") sleep $sleep ts="$(date +"TS %s.%N %F %T")" loadavg="$(uptime)" #通过uptime命令获取cpu load echo "$ts $loadavg">> $PREFIX-${file}-status mysql -e "show global status" >> $PREFIX-${file}-status & #获取MySQL全局信息 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 $tsdoneecho Exiting because $RUNFILE not exist 对上一步收集到的全局信息进行分析。
#!/bin/shawk ' BEGIN{ printf "#ts date time load QPS"; fmt = " %.2f"; } /^TS/ { # The timestamp lines begin with TS. ts = substr($2, 1, index($2,".") - 1); load = NF - 2; diff = ts -prev_ts; prev_ts = ts; printf "\n%s %s %s %s",ts,$3,$4,substr($load, 1, length($load)-1); } /Queries/ { printf fmt, ($2-Queries)/diff; Queries=$2 } ' "$@"运行方式:sh hi_anaylyze.sh 5-sec-status-2018-02-22_14_status >>4plot.log (将分析后的结果记入4plot.log中)
同样使用gnupot进行绘图分析:
gunplot>plot '4plot' using 5 with lines title 'QPS', 4 with lines title 'load' #using 5 表示使用第5列数据作图 #with lines 定义图中的趋势使用线来表示 #title 'QPS' 定义线的名称 #使用,(逗号)分割,进行多列数据的绘制(两个图形的数据来源不同,仅作为示例使用。)
看完如何使用sysbench对MySQL实施压力测试这篇文章后,很多读者朋友肯定会想要了解更多的相关内容,如需获取更多的行业信息,可以关注我们的行业资讯栏目。
数据
测试
信息
时间
图形
系统
线程
文件
服务器
服务
最大
全局
数据库
结果
脚本
分析
绘图
压力
客户
数量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发法律常识案例分析
查询数据库id内容
找一下服务器的服务
消息队列和数据库
服务器报错500是前端还是后端
服务器内存l与r的区别
鸡西网络安全周法治日活动
病毒数据库更新
软件开发年前好找工作吗
软件开发中视图是什么意思
关于国家网络安全专业书籍
网络安全法学生
泰坦之旅服务器怎么搭建
数据库百分比字段
马鞍山系统软件开发
河北省网络安全进展
南城软件开发定制
阜新市大数据管理中心网络安全
战舰世界俄服务器中文字幕
日照平台软件开发哪家好
服务器领地皮指令
农业软件开发南阳
闵行区节能软件开发结构设计
数据库第一章习题
湛江三贝壳软件开发
成都企业软件开发哪家专业
9什么是网络安全
网络安全协议都有哪些
空谷幽兰下载软件开发
迅飞软件开发公司