如何使用sysbench对MySQL实施压力测试
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,下面一起来了解下如何使用sysbench对MySQL实施压力测试,相信大家看完肯定会受益匪浅,文字在精不在多,希望如何使用sysbench对MySQL实施压力测试这篇短内容是你想要的。1.背景出自pe
千家信息网最后更新 2025年01月21日如何使用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安全错误
数据库的锁怎样保障安全
iass层装数据库吗
网络安全公司的性质
磁盘阵列服务器密码找不到了
鑫瑞互联网络技术有限公司
手机端 服务器
java操控数据库
家居定制软件开发
数据库的安全设置 教学设计
udp为什么连不上游戏服务器
如何进入服务器的数据库
spring配置多个数据库
方舟筛选服务器
网络安全测评设备
国土空间规划软件开发
idc 服务器
网络安全主题会议资料
在oa图书馆数据库
数据库回滚函数
hive数据库可视化连接工具
免费代理服务器账户密码
轻松筹 互联网大会科技
北辰区项目网络技术不二之选
网络技术发展报告
网络安全 产值 和营业比
计算机网络技术什么是单播
ctf网络安全有什么用
day服务器进不去
adds数据库
对日软件开发实战项目
王牌竞速一直卡在获取服务器