如何使用sysbench对MySQL实施压力测试
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,下面一起来了解下如何使用sysbench对MySQL实施压力测试,相信大家看完肯定会受益匪浅,文字在精不在多,希望如何使用sysbench对MySQL实施压力测试这篇短内容是你想要的。1.背景出自pe
千家信息网最后更新 2026年11月02日如何使用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安全错误
数据库的锁怎样保障安全
咖啡
新华互联网科技
互联网的科技
互联网金融 科技
互联网医疗科技
平安科技 互联网
互联网科技英文
万易互联网科技有限公司
亿策互联网科技
银优互联网科技有限公司
重庆科技学院互联网
成都互联网科技公司100强
南山科技园互联网公司有哪些
晓花互联网科技有限公司网址
健康食品互联网创新科技园项目
互联网行业科技股
互联网科技创新的路径
西安左小互联网科技有限公司
黑龙江互联网科技公司
银川新华互联网科技学校招聘
互联网科技海报
互联网科技开发公司
金融科技 互联网金融
亿账通互联网科技
欧洲十大科技互联网公司
贵州叶脉互联网科技有限公司所属行业
宜昌元轩互联网科技有限公司
深圳艾果互联网通讯科技
萌小萌互联网科技河南有限公司
上海万顺科技互联网有限公司招聘