(压测)sysbench1.0.20压测Mysql

背景

sysbench是基于LuaJIT的可编写脚本的多线程基准测试工具。它最常用于数据库基准测试,但也可用于创建不涉及数据库服务器的任意复杂的工作负载。(本次我们只讨论对应Mysql的压力测试内容,对于它支持的postgresql不讨论)

写在前面
本文来自知数堂 https://github.com/zhishutech/mysqldba
link

官方链接https://github.com/akopytov/sysbench
link

详细内容请阅读原文文档

sysbench安装

https://github.com/akopytov/sysbench(下载安装包1.0.20)
./autogen.sh
# Add --with-pgsql to build with PostgreSQL support
./configure
make -j
make install

操作方法

1.下载https://github.com/zhishutech/mysqldba/tree/master/mysql-benchmark
2.本次使用到的文件名为sysbench10_prepare.sh(准备数据),之后包含预热数据:prewarm  修改上面脚本(把prepare改为prewarm)
sysbench05-oltp.sh(运行压测)
sysbench10_cleanup.sh(清理数据),笔者更改sysbench10_prepare.sh文件得来的

1.
(压测)sysbench1.0.20压测Mysql_第1张图片

环境介绍

Mysql5.7.26主从
sysbench1.0.20
测试用表10张,单张100W行,默认算法
其他参数见sysbench官网

具体内容

需要读者该更的行数及内容

24 export LD_LIBRARY_PATH=/usr/local/sandboxes/mysql_base/5.7.26/lib/
33 BASEDIR="/tools/testsysbench"
66 while [ $round -lt 11 ]
find / -name oltp_read_only.lua (查找脚本内容)
79 sysbench /tools/sysbench-1.0.20/src/lua/oltp_read_write.lua \

本次只测试了oltp_read_write.lua(读写)脚本的内容,对于只读,只写,update脚本读者可以按照下面的内容分批独立测试

1.准备数据:/bin/bash sysbench10_prepare.sh


/tools/testpy/mysqldba-master/mysql-benchmark/sysbench10_prepare.sh
#!/bin/sh
export LD_LIBRARY_PATH=/usr/local/sandboxes/mysql_base/5.7.26/lib/

. ~/.bash_profile

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

BASEDIR="/tools/testsysbench"
if [ ! -d $BASEDIR ]
then
   mkdir $BASEDIR -p
fi
cd $BASEDIR

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

DBIP=192.168.66.133
DBPORT=17261
DBUSER='msandbox'
DBPASSWD='123456'
SOCKET='/tmp/mysql_sandbox17261.sock'
NOW=`date +'%Y%m%d%H%M'`
DBNAME="sysbench"
TBLCNT=10
ROWS=1000000
DURING=180

#create db
echo 'now create db'
mysql -h$DBIP -P$DBPORT -u$DBUSER -p$DBPASSWD -e 'create database sysbench'
echo 'create ok'
## prepare data
echo 'now prepare data'
sysbench /tools/sysbench-1.0.20/src/lua/oltp_read_write.lua  \
 --mysql-host=$DBIP \
 --mysql-port=$DBPORT \
 --mysql-user=$DBUSER \
 --mysql-password=$DBPASSWD \
 --mysql-db=$DBNAME \
 --db-driver=mysql \
 --tables=$TBLCNT \
 --table-size=$ROWS \
 --time=$DURING prepare
#预热数据时,prepare改为prewarm                              

2.预热数据:/bin/bash sysbench10_prewarm.sh (把上面的脚本prepare改为prewarm)

3.运行压测: /bin/bash sysbench05-oltp.sh

#!/bin/bash
export LD_LIBRARY_PATH=/usr/local/sandboxes/mysql_base/5.7.26/lib/

. ~/.bash_profile

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

BASEDIR="/tools/testsysbench"
cd $BASEDIR

# 记录所有错误及标准输出到 sysbench.log 中
exec 3>&1 4>&2 1>> sysbench.log 2>&1
DBIP=192.168.66.133
DBPORT=17261
DBUSER='msandbox'
DBPASSWD='123456'
SOCKET='/tmp/mysql_sandbox17261.sock'
NOW=`date +'%Y%m%d%H%M'`
DBNAME="sysbench"
TBLCNT=10
WARMUP=300
DURING=900
ROWS=1000000
MAXREQ=20000000

# 并发压测的线程数,根据机器配置实际情况进行调整
RUN_NUMBER="8 64 128 256 512 768 1024 1664 2048 4096"

## prepare data
## sysbench --mysql-host=x --mysql-port=x --mysql-user=x --mysql-password=x --mysql-db=x --oltp_tables
_count=50 \
## --oltp-table-size=20000000 prepare

round=1
# 一般至少跑3轮测试,我正常都会跑10轮以上
while [ $round -lt 4 ]
do

#每回合日志位置:
rounddir=$BASEDIR/logs-round${round}
mkdir -p ${rounddir}

for thread in `echo "${RUN_NUMBER}"`
do

sysbench /tools/sysbench-1.0.20/src/lua/oltp_read_write.lua  --db-driver=mysql --mysql-host=${DBIP} --
mysql-port=${DBPORT} \
--mysql-user=${DBUSER} --mysql-password=${DBPASSWD} --mysql-db=${DBNAME} --tables=${TBLCNT} \
--table-size=${ROWS}  --threads=${thread}  --report-interval=1 \
--rand-type=uniform --max-time=${DURING} --max-requests=0 --percentile=99 run >> ${rounddir}/sysbench_
${thread}.log

sleep 300
done

round=`expr $round + 1`
sleep 300
done

4.清理数据:/bin/bash sysbench10_cleanup.sh

推荐内容

在执行压测时,tailf Mysql错误日志 tailf msandbox.err(根据报错发现数据问题)

运行压测时后,会在脚本中指定的目录/tools/testsysbench中生成压测结果,我们可以根据内容进行图表或是手动分析

压测生成的内容
(压测)sysbench1.0.20压测Mysql_第2张图片

参数

参数的解释:
--threads=4500  表示发起4500个并发连接
--oltp-read-only=off 表示不要进行只读测试,也就是会采用读写混合模式测试
--report-interval=10 表示每10秒输出一次测试进度报告
--rand-type=uniform 表示随机类型为固定模式,其他几个可选随机模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累托)
--time=120 表示最大执行时长为 120秒
--max-requests=0 表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长
--tables=10  表示10个表
--table-size=100000  单表100000条记录
--percentile=99 表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值

SQL statistics:
    queries performed:
        read:                            0         读操作
        write:                           233015     --写总数
        other:                           197026  --其他操作总数(SELECT、INSERT、UPDATE、DELETE之外的操作,例如COMMIT等)
        total:                           430041  --全部总数
    transactions:                        62617  (486.84 per sec.)  --总事务数(每秒事务数)
    queries:                             430041 (3343.55 per sec.) --查询数(每秒查询数)
    ignored errors:                      27087  (210.60 per sec.)  --忽略错误数
    reconnects:                          0      (0.00 per sec.)  --重新连接次数

General statistics:
    total time:                          128.6147s  --运行总时间
    total number of events:              62617  --事件总数

Latency (ms):
         min:                                    2.09
         avg:                                 8957.64
         max:                                99069.80
         95th percentile:                    27846.48
         sum:                            560900840.54

Threads fairness:    #线程平均数
    events (avg/stddev):           13.9149/3.92
    execution time (avg/stddev):   124.6446/2.39

可以根据/usr/share/sysbench下面的lua脚本进行读、写、更新,随机等等测试,条件允许建议时间1小时以上,以便测试数据准确·

下图为磁盘满了,数据库自动关闭了。
(压测)sysbench1.0.20压测Mysql_第3张图片

写在最后
方便读者只是临时想测试一次,下面是单独的测试语句

1.数据准备
sysbench --test=/usr/share/sysbench/oltp_write_only.lua --mysql-host=192.168.255.90 --mysql-port=3306 --mysql-user=ice --mysql-password=xxxxxx --mysql-db=a1 --report-interval=10 --max-requests=0 --time=120 --threads=4500 --tables=10 --table-size=100000 prepare

2.运行测试
sysbench --test=/usr/share/sysbench/oltp_write_only.lua --mysql-host=192.168.255.90 --mysql-port=3306 --mysql-user=ice --mysql-password=hongsinCS --mysql-db=a1 --report-interval=10 --max-requests=0 --time=120 --threads=4500 --tables=10 --table-size=100000 run

3.清理数据:
sysbench --test=/usr/share/sysbench/oltp_write_only.lua --mysql-host=192.168.255.90 --mysql-port=3306 --mysql-user=ice --mysql-password=hongsinCS --mysql-db=a1 --report-interval=10 --max-requests=0 --time=120 --threads=4500 --tables=10 --table-size=100000 cleanup

sysbench0.5版本和1.0版本参数不一样,其他没有想到的内容,欢迎一起讨论

本文说明,主要技术内容来自互联网技术大佬的分享,还有一些自我的加工(仅仅起到注释说明的作用)。如有相关疑问,请留言,将确认之后,执行侵权必删

你可能感兴趣的:(Mysql,mysql)