iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何使用sysbench对MySQL实施压力测试
  • 839
分享到

如何使用sysbench对MySQL实施压力测试

2024-04-02 19:04:59 839人浏览 独家记忆
摘要

下面一起来了解下如何使用sysbench对Mysql实施压力测试,相信大家看完肯定会受益匪浅,文字在精不在多,希望如何使用sysbench对mysql实施压力测试这篇短内容是你想要的。1.背景出自perco

下面一起来了解下如何使用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 bash
sudo yum -y install sysbench

使用:

数据准备

#!/bin/sh
export LD_LIBRARY_PATH=/usr/local/mysql/lib/

. ~/.bash_profile

# 需要启用DEBUG模式时将下面三行注释去掉即可
#set -u
#set -x
#set -e

BASEDIR="/data/sysbench"    #创建sysbench文件目录
if [ ! -d $BASEDIR ]
then
   mkdir $BASEDIR -p
fi
cd $BASEDIR                 #进入sysbench文件目录

# 记录所有错误及标准输出到 sysbench.log 中
#exec 3>&1 4>&2 1>> sysbench_prepare.log 2>&1

DBIP=192.168.1.109
DBPORT=3109
DBUSER='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 -e

BASEDIR="/data/sysbench"
if [ ! -d $BASEDIR ]
then
   mkdir $BASEDIR -p
fi
cd $BASEDIR
#清理之前的遗留记录
rm -rf $BASEDIR/logs*
# 记录所有错误及标准输出到 sysbench.log 中
exec 3>&1 4>&2 1>> sysbench.log 2>&1

#时间单位秒
DBIP=192.168.1.109
DBPORT=3109
DBUSER='proxysql'
DBPASSWD='123456'
NOW=`date +'%Y%m%d%H%M'`
DBNAME="sysbench"
REPORT_INTERVAL=1
TBLCNT=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}.log

sleep 300                   #不同的线程数压测之间停顿5分钟
done

round=`expr $round + 1`
sleep 300                   #每轮压测之间停顿5分钟
done

运行完毕后在预设的数据目录下可以找到sysbench输出的日志。

如何使用sysbench对MySQL实施压力测试

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:              10205

Latency (ms):
         min:                               3113.18
         avg:                              11303.55
         max:                              24222.47
         95th percentile:                  16819.24
         sum:                            115352747.29

Threads 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 #安装gnuplot

gnuplot  #进入gnuplot终端

gnuplot>plot 'output/sysbench_8.log' using  9 w lines title 'QPS'
        #using 5 表示使用第5列数据作图
        #with lines 定义图中的趋势使用线来表示
        #title 'QPS' 定义线的名称
        #使用,(逗号)分割,进行多列数据的绘制

图形如下:如何使用sysbench对MySQL实施压力测试

通过其他脚本观察sysbench压测过程中的系统信息和数据库信息(来源于《高可用 MySQL》)

#!/bin/sh
#开始前获取全局配置参数
#每五秒获取一次cpu load,MySQL全局信息,InnoDB引擎相关信息,线程信息 
INTERVAL=5
PREFIX=$INTERVAL-sec-status
RUNFILE=/root/running
mysql -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 $ts
done
echo Exiting because $RUNFILE not exist    

对上一步收集到的全局信息进行分析。

#!/bin/sh
awk '
        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实施压力测试

(两个图形的数据来源不同,仅作为示例使用。)

看完如何使用sysbench对MySQL实施压力测试这篇文章后,很多读者朋友肯定会想要了解更多的相关内容,如需获取更多的行业信息,可以关注我们的数据库栏目。

您可能感兴趣的文档:

--结束END--

本文标题: 如何使用sysbench对MySQL实施压力测试

本文链接: https://www.lsjlt.com/news/34500.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mysql压力测试(sysbench)
    目录 配置项目环境: 参考:采用sysbench压测mysql详解_dream21st的博客-CSDN博客 实验步骤: 1、安装sysbench工具 2、在master上创建用户和库,配置用户的权限可以使他可以访问库(Mysql的主从复制...
    99+
    2023-09-05
    mysql 压力测试 数据库
  • [MySQL]-压力测试之Sysbench
    [MySQL]-压力测试之Sysbench 文章目录 [MySQL]-压力测试之Sysbench一、Sysbench概况1)介绍2)安装部署 二、实战1)构造测试数据2)开始运行压测结果...
    99+
    2023-09-04
    mysql 压力测试 数据库
  • 如何进行sysbench压力测试
    如何进行sysbench压力测试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 对于很多线上业务而言,如果有新服务器,新的...
    99+
    2024-04-02
  • MySQL压力测试中如何定制sysbench的Lua模板
    本篇内容介绍了“MySQL压力测试中如何定制sysbench的Lua模板”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2024-04-02
  • 如何使用sysbench测试Mysql性能
    这篇文章主要介绍了如何使用sysbench测试Mysql性能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 s...
    99+
    2024-04-02
  • 使用mysqlslap与sysbench怎么对MySQL进行压测
    这篇文章将为大家详细讲解有关使用mysqlslap与sysbench怎么对MySQL进行压测,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。mysqlslap...
    99+
    2024-04-02
  • MySQL如何使用sysbench做OLTP基准测试
    这篇文章给大家分享的是有关MySQL如何使用sysbench做OLTP基准测试的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 一、 安装① 下载源码...
    99+
    2024-04-02
  • 如何使用sysbench做oltp测试
    小编给大家分享一下如何使用sysbench做oltp测试,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!sysbench是一款开源...
    99+
    2024-04-02
  • JMeter如何对MySQL数据库进行压力测试
    这篇文章将为大家详细讲解有关JMeter如何对MySQL数据库进行压力测试,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、安装并配置 JMeter下载官网下载,下载二进制的这个 zip配置环境变量然后解...
    99+
    2023-06-28
  • 如何使用Apache压力测试工具
    这篇文章将为大家详细讲解有关如何使用Apache压力测试工具,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。下载进入apache官网 http://httpd.apache.org/ 下载apache即可启...
    99+
    2023-06-14
  • 如何使用jmeter压力测试工具
    今天就跟大家聊聊有关如何使用jmeter压力测试工具,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是压力测试顾名思义:压力测试,就是 被测试的系统,在一定的访问压力下,看程序运行...
    99+
    2023-05-31
    jmeter
  • Java如何使用jmeter进行压力测试
    本篇内容介绍了“Java如何使用jmeter进行压力测试”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!jmeter测试计划配置:运行bin目...
    99+
    2023-06-20
  • Linux下如何使用JMeter进行压力测试
    这篇文章主要为大家展示了“Linux下如何使用JMeter进行压力测试”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux下如何使用JMeter进行压力测试”这篇文章吧。JMeter是Apa...
    99+
    2023-06-27
  • pgbench如何实现压力测试脚本
    这篇文章主要介绍pgbench如何实现压力测试脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!创建测试表, 并填充数据  5000W 笔记录. pgbench&nb...
    99+
    2023-06-04
  • Linux中如何使用stress压力测试工具
    Linux中如何使用stress压力测试工具,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。参数说明:-        显...
    99+
    2023-06-16
  • Linux系统中如何使用FIO对硬盘进行压力测试
    这篇文章主要介绍Linux系统中如何使用FIO对硬盘进行压力测试,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!FIO是测试IOPS的非常好的工具,用来对磁盘进行压力测试和验证。磁盘IO是检查磁盘性能的重要指标,可以按...
    99+
    2023-06-27
  • 如何使用ab工具对服务器进行API压力测试
    本篇文章为大家展示了如何使用ab工具对服务器进行API压力测试,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1 系统吞吐量的简单介绍一个系统的吞度量(承压能力)与request对CPU的消耗、外部接...
    99+
    2023-06-22
  • 如何实现sysbench压测MyCAT的shell脚本
    小编给大家分享一下如何实现sysbench压测MyCAT的shell脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • Java使用jmeter进行压力测试
    本篇文章简单讲一下使用jmeter进行压力测试。其压测思想就是 通过创建指定数量的线程,同时请求指定接口,来模拟指定数量用户同时进行某个操作的场景。 jmeter测试计划配置: 运行...
    99+
    2024-04-02
  • mysql压力测试的作用是什么
    这篇文章主要介绍了mysql压力测试的作用是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。mysql压力测试的作用:测试主键硬件最高实际...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作