六子技术网首页

六子技术网

  • 网站首页
  • HTML/CSS
  • javascript
  • seo优化
  • PS美工
  • 系统安全
  • 漏洞预警
  • 编程学习
  • 原创专区
  • 【六子技术网】是一家综合技术门户,为您提供网站建设,编程开发,安全维护,漏洞预警等技术文章

    技术文章MAP

    文章

    mysql性能测试sysbench配置使用

    日期:2019/12/1 12:16:21来源分类:编程开发

    通常,我们会出于以下几个目的对MySQL进行压力测试:

    1、确认新的MySQL版本性能相比之前差异多大,比如从5.6变成5.7,或者从官方版本改成Percona分支版本;
    2、确认新的服务器性能是否更高,能高多少,比如CPU升级了、阵列卡cache加大了、从机械盘换成SSD盘了;
    3、确认一些新的参数调整后,对性能影响多少,比如 innodb_flush_log_at_trx_commit、sync_binlog 等参数;
    4、确认即将上线的新业务对MySQL负载影响多少,是否能承载得住,是否需要对服务器进行扩容或升级配置;
    针对上面这几种压测的目的,相应的测试方法也有所不同。

    先说第四种,需要和线上业务结合起来,这时候就需要自行开发测试工具,或者利用 tcpcopy 将线上实际用户请求导向测试环境,进行仿真模拟测试。

    对于前三种,我们通常采用基准测试就可以。比较常用的MySQL基准压力测试工具有 tpcc-mysql、sysbench、mysqlslap 等几个。

    关于压力测试工具的使用,可以查看我之前在ORACLE技术嘉年华上的分享:MySQL压力测试经验,在这里不再细说。

    基于促进同行间的交流,统一MySQL压测标准,并且可以相互分享、对比、借鉴测试结果的目的。因此老叶特别发起MySQL压力测试基准值倡议。建议大家采用以下几种压力测试基准值。
    注意最后一行,一项测试开始前需要用prepare来准备好表和数据,run执行真正的压测,cleanup用来清除数据和表。

    1、prepare

    shell> sysbench --test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp_tables_count=20 --oltp-table-size=1000000 --mysql-host=10.19.0.2 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test --db-driver=mysql --threads=2500 --time=120 --max-requests=0 --oltp-test-mode=complex prepare

    2、run

    shell> sysbench --test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp_tables_count=20 --oltp-table-size=1000000 --mysql-host=10.19.0.2 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test --db-driver=mysql --threads=2500 --time=120 --max-requests=0 --oltp-test-mode=complex prepare run >> /var/log/sysbench_oltpx_2017.log

    3、cleanup

    shell> sysbench --test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp_tables_count=20 --oltp-table-size=100000 --mysql-host=10.19.0.2 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test --db-driver=mysql --threads=2500 --time=120 --max-requests=0 --oltp-test-mode=complex cleanup

    参数说明:

    --test=tests/db/oltp.lua 表示调用 tests/db/oltp.lua 脚本进行 oltp 模式测试

    --oltp_tables_count=10 表示会生成 10 个测试表

    --oltp-table-size=100000 表示每个测试表填充数据量为 100000

    --rand-init=on 表示每个测试表都是用随机数据来填充的

    --threads=8 表示发起 8个并发连接

    --oltp-read-only=off 表示不要进行只读测试,也就是会采用读写混合模式测试

    --report-interval=10 表示每10秒输出一次测试进度报告

    --rand-type=uniform 表示随机类型为固定模式,其他几个可选随机模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累托)

    --time=120 表示最大执行时长为 120秒

    --max-requests=0 表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长

    --percentile=99 表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值

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

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

    第二步的结果说明:

    sysbench 1.0.7 (using bundled LuaJIT 2.1.0-beta2)

    Running the test with following options:

    Number of threads: 20

    Initializing random number generator from current time

    Initializing worker threads...

    Threads started!

    SQL statistics:

        queries performed:

            read:                            361046 //总select数量

            write:                           103143 //总update insert delete数量

            other:                           51573 //commit unlock tables 以及其它数量

            total:                           515762 //总数

        transactions:                        25784  (214.70 per sec.) //通常需要关注的数TPS

        queries:                             515762 (4294.76 per sec.) //

        ignored errors:                      5      (0.04 per sec.) //

        reconnects:                          0      (0.00 per sec.) //

    General statistics:

        total time:                          120.0886s //指定压测时间

        total number of events:              25784 //总的事件数一般与transactions相同

    Latency (ms):

             min:                                  2.97

             avg:                                 93.11 //95%的平均响应时间

             max:                               2027.86

             95th percentile:                    183.21 //95%语句执行时间

             sum:                            2400849.05

    Threads fairness: //线程公平性

        events (avg/stddev):           1289.2000/7.74

        execution time (avg/stddev):   120.0425/0.02

    我们一般关注的用于绘图的指标主要有:

    response time avg: 平均响应时间。(后面的95%的大小可以通过--percentile=98的方式去更改)

    transactions: 精确的说是这一项后面的TPS 。但如果使用了-oltp-skip-trx=on,这项事务数恒为0,需要用total number of events 去除以总时间,得到tps(其实还可以分为读tps和写tps)

    read/write requests: 用它除以总时间,得到吞吐量QPS

    当然还有一些系统层面的cpu,io,mem相关指标

    本文由六子技术网小编:小熊编辑整理 - 转载请注明来源 - http://www.liuzi.net/bc/html/3967.html

    随机推荐

    • 该分类还没有添加任何内容!
    • 该分类还没有添加任何内容!

    Copyright 2005-2019 【六子技术网】 版权所有 黑ICP备16886888号

    声明:本站所有文章来自互联网 如有异议 请联系本站管理员