zoukankan      html  css  js  c++  java
  • 使用sysbench 0.5 对mysql 进行性能、压力测试

    sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。
    目前sysbench代码托管在launchpad上,项目地址:https://launchpad.net/sysbench(原来的官网 http://sysbench.sourceforge.net 已经不可用),源码采用bazaar管理。

    一、 下载源码包
    安装epel包后以便安装bzr客户端:

    rpm -Uvh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

    随着时间的推移及版本的更新,epel 的rpm包的地址会发生改变,但是只要域名不变,我们就可以通过

    网址 http://dl.fedoraproject.org/pub/epel 一个目录一个目录的查找到我们需要的epel 安装包。

    然后就可以开始安装bzr客户端了:

    yum install bzr

    之后,就可以开始用bzr客户端下载tpcc-mysql源码了。

    cd /tmp
    bzr branch lp:sysbench

    sysbench支持以下几种测试模式:

    1、CPU运算性能
    2、磁盘IO性能
    3、调度程序性能
    4、内存分配及传输速度
    5、POSIX线程性能
    6、数据库性能(OLTP基准测试)
    目前sysbench主要支持 mysql,drizzle,pgsql,oracle 等几种数据库。

    如果需要测试PostgreSQL、Oracle,则在configure时需要加上 --with-oracle 或者 --with-pgsql 参数

    二、编译安装

      在编译安装之前,有些依赖包需要安装,我安装时只遇到以下几个。如果有需要其他的请自行补充:

     

     yum install -y automake libtool

    编译非常简单,可参考 README 文档,简单步骤如下:

    cd /tmp/sysbench
    ./autogen.sh
    ./configure --prefix=/usr/local --with-mysql-includes=/usr/include/mysql/ --with-mysql-libs=/usr/lib/mysql/ && make && make install

    说明:

      --with-mysql-include : 指定 mysql 头文件的路径。一般是 针对mysql 数据环境变量的$BASEDIR/inlucde

          --with-mysql-libs:       指定mysql 库文件的路径,一般是针对mysql 数据环境变量的$BASEDIR/lib

      --prefix:                     指定可执行文件的存放路径

     
    # 如果 make 没有报错,就会在 sysbench 目录下生成二进制命令行工具 sysbench
    sysbench]# ls -la sysbench/sysbench
    
    -rwxr-xr-x 1 root root 1531821 Mar 2 07:28 sysbench/sysbench
    三、参数说明

    --test=tests/db/oltp.lua 表示调用 tests/db/oltp.lua 脚本进行 oltp 模式测试
    --oltp_tables_count=20 表示会生成 10 个测试表
    --oltp-table-size=1000000 表示每个测试表填充数据量为 1000000 
    --rand-init=on 表示每个测试表都是用随机数据来填充的

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

    即:模拟 对10个表并发OLTP测试,每个表1000万行记录,持续压测时间为 1小时。

    真实测试场景中,建议持续压测时长不小于30分钟,否则测试数据可能不具参考意义。

    四、OLTP测试前准备

    关于sysbench命令的语法格式这里不做介绍了,可通过sysbench --help来查看。 如果第一次使用的话,只需要知道,前面所有的配置是一样的,只有最后一个参数决定了sysbench 所做的操作,比如:

    •   prepare :: 准备数据
    •   run       :: 进行测试
    •   cleanup :: 清除数据
    •   help      :: 查看帮助文档
    •   version  :: 查看版本信息

    下面初始化测试库环境(总共20个测试表,每个表 100000 条记录,填充随机生成的数据):

    cd /tmp/sysbench/sysbench
    # 创建测试数据库
    mysqladmin create sbtest
    # 登录mysql ,给本地用户授权 mysql
    grant all on sbtest to ''@'localhost';
    flush privileges;
    exit
    # 准备初始数据 ./sysbench --mysql-host=10.10.100.191 --mysql-port=8066 --mysql-user=test --mysql-password=test123 --mysql-db=test --test=tests/db/oltp.lua --oltp_tables_count=20 --oltp-table-size=1000000 --rand-init=on prepare

    四、进行OLTP测试

    在上面初始化数据参数的基础上,再增加一些参数,即可开始进行测试了:

    ./sysbench --mysql-host=10.10.100.191 --mysql-port=8066 --mysql-user=test --mysql-password=test123 --mysql-db=TEST
    --test=tests/db/oltp.lua --oltp_tables_count=20 --oltp-table-size=1000000 --num-threads=8 --oltp-read-only=off
    --report-interval=20 --rand-type=uniform --max-time=600 --max-requests=0 --percentile=97 --oltp-skip-trx=on
    --mysql-ignore-errors=1062 run >> sysbench_oltpX_8_20180324.log

     需要说明的是,在对类似mycat等中间件进行测试的时候,如果不加上参数 --oltp-skip-trx=on,则所有读写操作都会在主库进行。从库无法实现读分流。而加上该参数后,又会出现1062,duplicate key (重复主键)的问题,所以还要再加上一个参数--mysql-ignore-errors 。 两具参数配合使用。

    五、结果解读

    OLTP test statistics:
    queries performed:
    read: 268982 #总select次数
    write: 76852 #总的写入次数
    other: 0
    total: 345834 # 读写总次数
    transactions: 0 (0.00 per sec.) # 总事务数(每秒事务数)
    read/write requests: 345834 (576.23 per sec.) # 读写总次数
    other operations: 0 (0.00 per sec.) # commit、unlock tables以及其他mutex的数量
    ignored errors: 0 (0.00 per sec.)
    reconnects: 0 (0.00 per sec.) # 重连次数

    General statistics:
    total time: 600.1663s # 本次测试总耗时
    total number of events: 19213 # mysql-event 次数,
    total time taken by event execution: 4800.3787s 
    response time:
    min: 138.81ms
    avg: 249.85ms #平均影响时长(去除一定比例最长响应时长后的平均值,由参数percentile决定)
    max: 1391.54ms
    approx. 97 percentile: 401.68ms

    Threads fairness:
    events (avg/stddev): 2401.6250/9.87
    execution time (avg/stddev): 600.0473/0.04


    ===================
    天行健,君子以自强不息
    地势坤,君子以厚德载物
    ===================
  • 相关阅读:
    python学习笔记(五)os、sys模块
    Lepus_天兔的安装
    python学习笔记(四)random 、json模块
    python学习笔记(三)函数
    Jenkins的安装及邮件配置
    Nginx+tomcat配置负载均衡集群
    python学习笔记(二)文件操作和集合
    python练习
    Jmeter(十)Linux下配置安装Jmeter及执行测试任务
    Jmeter(九)压力测试
  • 原文地址:https://www.cnblogs.com/halberd-lee/p/8511099.html
Copyright © 2011-2022 走看看