sysbench 压测 详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sysbench 压测 详解相关的知识,希望对你有一定的参考价值。

下载sysbench(mysql官网就有)
解压,进入解压以后的目录
./autogen.sh
./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib
make && make install
export LD_LIBRARY_PATH=/usr/local/mysql/lib

开始进行测试
通用配置
接下来我们来分别看一下各个模式的相关参数、测试方法和结果分析。
sysbench的基本命令格式为:
sysbench –test=< test-name> [options]… < command>
主要分为三个部分:

1、–test=< test-name>
这部分是指定测试类型,基本类型有fileio,cpu,memory,threads,mutex,oltp(或者指定lua脚本)

2、[options]…
这部分包括测试需要的各种选项,有全局的也有每个测试模式自由的选项
(每个测试模式的选项可以用./sysbench –test=< test-name> help来获取)

3、< command>
控制命令,总共有五个
prepare #准备测试,主要是生成测试数据
run #执行测试,根据选项限制来执行测试
cleanup #清除准备阶段生成的测试数据
help #获取帮助文档
version #获取版本信息

几个重要的全局参数:
–num-threads=N number of threads to use [1] #测试时使用的线程数
–max-requests=N limit for total number of requests [10000] #测试过程最多执行多少次请求
–max-time=N limit for total execution time in seconds [0] #测试过程总共执行多长时间(和–max-requests效果同样,但是两个同时限定的时候谁优先还没有测试)
–report-interval=N periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0] #每隔多少秒输出测试概况(这个过程你可以观察到mysql redolog的切换情况)
–db-driver=STRING specifies database driver to use (‘help’ to get list of available drivers) #指定需求测试的数据库类型,默认是mysql
#mysql链接选项
–mysql-host=[LIST,…] MySQL server host [localhost] #mysql主机地址
–mysql-port=N MySQL server port [3306] #mysql端口
–mysql-socket=[LIST,…] MySQL socket #mysql socket文件位置,指定这个之后 其他的链接选项均可以不指定
–mysql-user=STRING MySQL user [sbtest] #用来测试的mysql用户名
–mysql-password=STRING MySQL password [] #密码
–mysql-db=STRING MySQL database name [sbtest] #测试数据库名 默认sbtest

1、测试磁盘IO性能

参数详解: 
–file-num=N 代表生成测试文件的数量,默认为128。 
–file-block-size=N 测试时所使用文件块的大小,如果想磁盘针对innodb存储引擎进行测试,可以将其设置为16384,即innodb存储引擎页的大小。默认为16384。 
–file-total-size=SIZE 创建测试文件的总大小,默认为2G大小。 
–file-test-mode=STRING 文件测试模式,包含:seqwr(顺序写), seqrewr(顺序读写), seqrd(顺序读), rndrd(随机读), rndwr(随机写), rndrw(随机读写)。 
–file-io-mode=STRING 文件操作的模式,sync(同步),async(异步),fastmmap(快速mmap),slowmmap(慢速mmap),默认为sync同步模式。 
–file-async-backlog=N 对应每个线程队列的异步操作数,默认为128。 
–file-extra-flags=STRING 打开文件时的选项,这是与API相关的参数。 
–file-fsync-freq=N 执行fsync()函数的频率。fsync主要是同步磁盘文件,因为可能有系统和磁盘缓冲的关系。 0代表不使用fsync函数。默认值为100。 
–file-fsync-all=[on|off] 每执行完一次写操作,就执行一次fsync。默认为off。 
–file-fsync-end=[on|off] 在测试结束时执行fsync函数。默认为on。 
–file-fsync-mode=STRING文件同步函数的选择,同样是和API相关的参数,由于多个操作系统对于fdatasync支持不同,因此不建议使用fdatasync。默认为fsync。 
–file-merged-requests=N 大多情况下,合并可能的IO的请求数,默认为0。 
–file-rw-ratio=N 测试时的读写比例,默认时为1.5,即可3:2。
1)生成测试文件
sysbench --test=fileio --file-num=10 --file-total-size=5G prepare
2)测试
sysbench --test=fileio --file-total-size=5G --file-test-mode=rndrw --max-time=180 --max-requests=100000000 --num-threads=16 --init-rng=on --file-num=10 --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run
3)结果如下
sysbench 0.4.12.10:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 16
Initializing random number generator from timer.

Random number generator seed is 0 and will be ignored

Extra file open flags: 4000
10 files, 512Mb each
5Gb total file size
Block size 16Kb
Number of random requests for random IO: 100000000
Read/Write ratio for combined random IO test: 1.50
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Threads started!

Time limit exceeded, exiting...
(last message repeated 15 times)
Done.

Operations performed:  17981 reads, 11990 writes, 0 Other = 29971 Total
Read 280.95Mb  Written 187.34Mb  Total transferred 468.3Mb  (2.6012Mb/sec)
  166.48 Requests/sec executed

General statistics:
    total time:                          180.0298s
    total number of events:              29971
    total time taken by event execution: 2880.3206
    response time:
         min:                                  0.38ms
         avg:                                 96.10ms
         max:                                390.42ms
         approx.  95 percentile:             209.91ms

Threads fairness:
    events (avg/stddev):           1873.1875/11.51
    execution time (avg/stddev):   180.0200/0.01

        ##注意:主要看这里
        Read 280.95Mb  Written 187.34Mb  Total transferred 468.3Mb  (2.6012Mb/sec)  166.48 Requests/sec executed

        大概是在180秒里面总共随机读取280.95MB ,写入187.24MB ,平均每秒随机读写的效率时2.6012MB ,IOPS为166.48 Requests/sec 

4)清楚测试数据
    sysbench --test=fileio --file-num=10 --file-total-size=5G cleanup

2、cpu测试
参数详解:
–cpu-max-prime=N 用来选项指定最大的素数,具体参数可以根据CPU的性能来设置,默认为10000

sysbench --test=cpu --cpu-max-prime=20000 run

测试结果
    sysbench 0.4.12.10:  multi-threaded system evaluation benchmark

    Running the test with following options:
    Number of threads: 1
    Random number generator seed is 0 and will be ignored

    Doing CPU performance benchmark

    Primer numbers limit: 20000

    Threads started!
    Done.

    General statistics:
        total time:                          20.8126s
        total number of events:              10000
        total time taken by event execution: 20.8006
        response time:
             min:                                  1.91ms
             avg:                                  2.08ms
             max:                                 13.94ms
             approx.  95 percentile:               2.71ms

    Threads fairness:
        events (avg/stddev):           10000.0000/0.00
        execution time (avg/stddev):   20.8006/0.00

       ##注意:测试的总时间(total time)即可(越小越忧)

3、内存分配及传输速度(测试了内存的连续读写性能)
参数详解:
–memory-block-size=SIZE 测试内存块的大小,默认为1K
–memory-total-size=SIZE 数据传输的总大小,默认为100G
–memory-scope=STRING 内存访问的范围,包括全局和本地范围,默认为global
–memory-hugetlb=[on|off] 是否从HugeTLB池分配内存的开关,默认为off
–memory-oper=STRING 内存操作的类型,包括read, write, none,默认为write
–memory-access-mode=STRING 内存访问模式,包括seq,rnd两种模式,默认为seq

sysbench --test=memory --memory-block-size=8K --memory-total-size=1G  --num-threads=16 run

结果:
    sysbench 0.4.12.10:  multi-threaded system evaluation benchmark

    Running the test with following options:
    Number of threads: 16
    Random number generator seed is 0 and will be ignored

    Doing memory operations speed test
    Memory block size: 8K

    Memory transfer size: 1024M

    Memory operations type: write
    Memory scope type: global
    Threads started!
    Done.

    Operations performed: 131072 (1223663.93 ops/sec)

    1024.00 MB transferred (9559.87 MB/sec)

    General statistics:
        total time:                          0.1071s
        total number of events:              131072
        total time taken by event execution: 0.3210
        response time:
             min:                                  0.00ms
             avg:                                  0.00ms
             max:                                 96.20ms
             approx.  95 percentile:               0.00ms

    Threads fairness:
        events (avg/stddev):           8192.0000/7510.93
        execution time (avg/stddev):   0.0201/0.03

4、oltp-数据库性能测试
参数详解:
–oltp-test-mode=STRING 执行模式{simple,complex(advanced transactional),nontrx(non-transactional),sp}。默认是complex
–oltp-reconnect-mode=STRING 重新连接模式{session(不使用重新连接。每个线程断开只在测试结束),transaction(在每次事务结束后重新连接),query(在每个SQL语句执行完重新连接),random(对于每个事务随机选择以上重新连接模式)}。默认是session
–oltp-sp-name=STRING 存储过程的名称。默认为空
–oltp-read-only=[on|off] 只读模式。Update,delete,insert语句不可执行。默认是off
–oltp-skip-trx=[on|off] 省略begin/commit语句。默认是off
–oltp-range-size=N 查询范围。默认是100
–oltp-point-selects=N number of point selects [10]
–oltp-simple-ranges=N number of simple ranges [1]
–oltp-sum-ranges=N number of sum ranges [1]
–oltp-order-ranges=N number of ordered ranges [1]
–oltp-distinct-ranges=N number of distinct ranges [1]
–oltp-index-updates=N number of index update [1]
–oltp-non-index-updates=N number of non-index updates [1]
–oltp-nontrx-mode=STRING 查询类型对于非事务执行模式{select, update_key, update_nokey, insert, delete} [select]
–oltp-auto-inc=[on|off] AUTO_INCREMENT是否开启。默认是on
–oltp-connect-delay=N 在多少微秒后连接数据库。默认是10000
–oltp-user-delay-min=N 每个请求最短等待时间。单位是ms。默认是0
–oltp-user-delay-max=N 每个请求最长等待时间。单位是ms。默认是0
–oltp-table-name=STRING 测试时使用到的表名。默认是sbtest
–oltp-table-size=N 测试表的记录数。默认是10000
–oltp-dist-type=STRING 分布的随机数{uniform(均匀分布),Gaussian(高斯分布),special(空间分布)}。默认是special
–oltp-dist-iter=N 产生数的迭代次数。默认是12
–oltp-dist-pct=N 值的百分比被视为’special’ (for special distribution)。默认是1
–oltp-dist-res=N ‘special’的百分比值。默认是75

  1)创建测试用的数据
    sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=sysbench --mysql-user=root --mysql-host=127.0.0.1 --mysql-password=123456 prepare
  2)开始测试
    sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=sysbench --mysql-user=root --mysql-host=127.0.0.1 --mysql-password=123456 --max-time=60 --oltp-read-only=off --max-requests=0 --num-threads=8 run
  3)结果如下
        sysbench 0.4.12.10:  multi-threaded system evaluation benchmark

        No DB drivers specified, using mysql
        Running the test with following options:
        Number of threads: 8
        Random number generator seed is 0 and will be ignored

        Doing OLTP test.
        Running mixed OLTP test
        Using Special distribution (12 iterations,  1 pct of values are returned in 75 pct cases)
        Using "BEGIN" for starting transactions
        Using auto_inc on the id column
        Using 1 test tables
        Threads started!
        Time limit exceeded, exiting...
        (last message repeated 7 times)
        Done.

        OLTP test statistics:
            queries performed:
                read:                            263046
                write:                           93934
                other:                           37574
                total:                           394554
            transactions:                        18785  (313.05 per sec.)
            deadlocks:                           4      (0.07 per sec.)
            read/write requests:                 356980 (5948.98 per sec.)
            other operations:                    37574  (626.16 per sec.)

        General statistics:
            total time:                          60.0069s
            total number of events:              18785
            total time taken by event execution: 479.9184
            response time:
                 min:                                  2.23ms
                 avg:                                 25.55ms
                 max:                               1696.98ms
                 approx.  95 percentile:              54.14ms

        Threads fairness:
            events (avg/stddev):           2348.1250/6.21
            execution time (avg/stddev):   59.9898/0.00

##主要注意这几个参数 transactions: 18785 (313.05 per sec.)
read/write requests: 356980 (5948.98 per sec.)
other operations: 37574 (626.16 per sec.)

4)清除数据
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=sysbench --mysql-user=root --mysql-host=127.0.0.1 --mysql-password=123456 --max-time=60 --oltp-read-only=off --max-requests=0 --num-threads=8 cleanup

以上是关于sysbench 压测 详解的主要内容,如果未能解决你的问题,请参考以下文章

MySQL性能压测工具SysBench详解(非常详细)

mysql之 sysbench1.0.3 安装与系统压力测试

sysbench对MySQL的压测,使用sysbench压测磁盘io

sysbench压测工具 压测 mysql

sysbench压测工具 压测 mysql

sysbench压测MySQL