最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

数据库性能测试之sysbench工具的安装与用法详解

来源:动视网 责编:小采 时间:2020-11-09 20:25:37
文档

数据库性能测试之sysbench工具的安装与用法详解

数据库性能测试之sysbench工具的安装与用法详解:1.简介和安装 sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。 官方站点:https://github.com/akopytov/sy
推荐度:
导读数据库性能测试之sysbench工具的安装与用法详解:1.简介和安装 sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。 官方站点:https://github.com/akopytov/sy


mysql相关选项:

  --mysql-host=[LIST,...]          MySQL server host [localhost]
  --mysql-port=[LIST,...]          MySQL server port [3306]
  --mysql-socket=[LIST,...]        MySQL socket
  --mysql-user=STRING              MySQL user [sbtest]
  --mysql-password=STRING          MySQL password []
  --mysql-db=STRING                MySQL database name [sbtest]
  --mysql-ignore-errors=[LIST,...] 要忽略的错误代码,值可为"all" [1213,1020,1205]

Compiled-in tests:
  fileio - File I/O test
  cpu - CPU performance test
  memory - Memory functions speed test
  threads - Threads subsystem performance test
  mutex - Mutex performance test

其中,command部分有4类:prepare run cleanup和help:

  • prepare:准备数据的命令。例如,在sysbench压力测试之前,需要先准备好测试库、测试表以及测试表中的数据。具体用法见后文。
  • run:表示进行压力测试。
  • cleanup:清除测试时产生的数据。
  • help:输出给定lua脚本的帮助信息。
  • test_lua是想要使用的lua脚本,如果是rpm包安装的sysbench,则这些脚本都是/usr/share/sysbench目录下。对于一般的数据库测试,只需使用和oltp有关的lua脚本就足够。

    options和lua_options是不同的,options是sysbench的选项,lua_options是lua脚本的选项,lua_options应该要放在test_lua的后面(非必需,但建议)。

    例如,要查看oltp_common.lua的用法,可以:

    sysbench /usr/share/sysbench/oltp_common.lua help

    3.准备测试数据

    首先创建sysbench所需数据库sbtest(这是sysbench默认使用的库名,必须创建测试库)。

    mysqladmin -h127.0.0.1 -uroot -pP@ssword1! -P3306 create sbtest;

    然后,准备测试所用的表,这些测试表放在测试库sbtest中。这里使用的lua脚本为/usr/share/sysbench/oltp_common.lua。

    sysbench --mysql-host=127.0.0.1 \
     --mysql-port=3306 \
     --mysql-user=root \
     --mysql-password=P@ssword1! \
     /usr/share/sysbench/oltp_common.lua \
     --tables=10 \
     --table_size=100000 \
     prepare

    其中--tables=10表示创建10个测试表,--table_size=100000表示每个表中插入10W行数据,prepare表示这是准备数的过程。

    mysql> show tables from sbtest;
    +------------------+
    | Tables_in_sbtest |
    +------------------+
    | sbtest1 |
    | sbtest10 |
    | sbtest2 |
    | sbtest3 |
    | sbtest4 |
    | sbtest5 |
    | sbtest6 |
    | sbtest7 |
    | sbtest8 |
    | sbtest9 |
    +------------------+
    
    mysql> select count(*) from sbtest.sbtest1;
    +----------+
    | count(*) |
    +----------+
    | 100000 |
    +----------+

    如果想要清除这10个表,可使用cleanup命令。

    sysbench --mysql-host=127.0.0.1 \
     --mysql-port=3306 \
     --mysql-user=root \
     --mysql-password=P@ssword1! \
     /usr/share/sysbench/oltp_common.lua \
     --tables=10 \
     cleanup

    4.数据库测试和结果分析

    稍微修改下之前准备数据的语句,就可以拿来测试了。

    需要注意的是,之前使用的lua脚本为oltp_common.lua,它是一个通用脚本,是被其它lua脚本调用的,它不能直接拿来测试。

    所以,我这里用oltp_read_write.lua脚本来做读、写测试。还有很多其它类型的测试,比如只读测试、只写测试、删除测试、大批量插入测试等等。可找到对应的lua脚本进行调用即可。

    sysbench --threads=4 \
     --time=20 \
     --report-interval=5 \
     --mysql-host=127.0.0.1 \
     --mysql-port=3306 \
     --mysql-user=root \
     --mysql-password=P@ssword1! \
     /usr/share/sysbench/oltp_read_write.lua \
     --tables=10 \
     --table_size=100000 \
     run

    以下是测试返回的结果:

    Initializing worker threads...

    Threads started!


    ####以下是每5秒返回一次的结果,统计的指标包括:
    #### 线程数、tps(每秒事务数)、qps(每秒查询数)、
    #### 每秒的读/写/其它次数、延迟、每秒错误数、每秒重连次数
    [ 5s ] thds: 4 tps: 130.16 qps: 2606.30 (r/w/o: 1824.51/520.66/261.13) lat (ms,95%): 104.84 err/s: 0.00 reconn/s: 0.00
    [ 10s ] thds: 4 tps: 126.74 qps: 2539.17 (r/w/o: 1778.17/507.52/253.47) lat (ms,95%): 108.68 err/s: 0.00 reconn/s: 0.00
    [ 15s ] thds: 4 tps: 136.54 qps: 2736.34 (r/w/o: 1915.25/548.01/273.07) lat (ms,95%): 102.97 err/s: 0.00 reconn/s: 0.00
    [ 20s ] thds: 4 tps: 107.44 qps: 2148.65 (r/w/o: 1505.60/428.17/214.89) lat (ms,95%): 132.49 err/s: 0.00 reconn/s: 0.00

    SQL statistics:
        queries performed:
            read:          35098   # 执行的读操作数量
            write:         10028   # 执行的写操作数量
            other:         5014    # 执行的其它操作数量
            total:         50140
        transactions:      2507   (124.29 per sec.)    # 执行事务的平均速率
        queries:           50140  (2485.82 per sec.)   # 平均每秒能执行多少次查询
        ignored errors:    0      (0.00 per sec.)
        reconnects:        0      (0.00 per sec.)

    General statistics:
        total time:                  20.1694s     # 总消耗时间
        total number of events:      2507         # 总请求数量(读、写、其它)

    Latency (ms):
             min:                            2.32
             avg:                           32.13
             max:                          575.78
             95th percentile:              118.92    # 采样计算的平均延迟
             sum:                        80554.96

    Threads fairness:
        events (avg/stddev):           626.7500/2.49
        execution time (avg/stddev):   20.1387/0.04

    5.cpu/io/内存等测试

    sysbench内置了几个测试指标。

    Compiled-in tests:
      fileio - File I/O test
      cpu - CPU performance test
      memory - Memory functions speed test
      threads - Threads subsystem performance test
      mutex - Mutex performance test

    可直接help输出测试方法。例如,fileio测试。

    [root@xuexi ~]# sysbench fileio help
    sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)
    
    fileio options:
     --file-num=N number of files to create [128]
     --file-block-size=N block size to use in all IO operations [16384]
     --file-total-size=SIZE total size of files to create [2G]
     --file-test-mode=STRING test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}
     --file-io-mode=STRING file operations mode {sync,async,mmap} [sync]
     --file-async-backlog=N number of asynchronous operatons to queue per thread [128]
     --file-extra-flags=[LIST,...] list of additional flags to use to open files {sync,dsync,direct} []
     --file-fsync-freq=N do fsync() after this number of requests (0 - don't use fsync()) [100]
     --file-fsync-all[=on|off] do fsync() after each write operation [off]
     --file-fsync-end[=on|off] do fsync() at the end of test [on]
     --file-fsync-mode=STRING which method to use for synchronization {fsync, fdatasync} [fsync]
     --file-merged-requests=N merge at most this number of IO requests if possible (0 - don't merge) [0]
     --file-rw-ratio=N reads/writes ratio for combined test [1.5]

    例如,创建5个文件,总共1G,每个文件大概200M。

    sysbench fileio --file-num=5 --file-total-size=1G prepare
    
    [root@xuexi ~]# ls -lh test*
    -rw------- 1 root root 205M Jul 8 12:15 test_file.0
    -rw------- 1 root root 205M Jul 8 12:15 test_file.1
    -rw------- 1 root root 205M Jul 8 12:15 test_file.2
    -rw------- 1 root root 205M Jul 8 12:15 test_file.3
    -rw------- 1 root root 205M Jul 8 12:15 test_file.4

    然后,运行测试。

    sysbench --events=5000 \
     --threads=16 \
     fileio \
     --file-num=5 \
     --file-total-size=G \
     --file-test-mode=rndrw \
     --file-fsync-freq=0 \
     --file-block-size=16384 \
     run

    结果:

    File operations:
        reads/s:                      98.67
        writes/s:                     66.85
        fsyncs/s:                     6.26

    Throughput:     # 吞吐量
        read, MiB/s:                  1.54  # 表示读的带宽
        written, MiB/s:               1.04  # 表示读的带宽

    General statistics:
        total time:                   12.7426s
        total number of events:       2117

    Latency (ms):
             min:                          0.00
             avg:                         86.66
             max:                       2919.41
             95th percentile:            646.19
             sum:                     183460.80

    Threads fairness:
        events (avg/stddev):          132.3125/24.19
        execution time (avg/stddev):  11.4663/1.09

    再比例cpu性能测试:

    [root@xuexi ~]# sysbench cpu --threads=40 --events=10000 --cpu-max-prime=20000 run
    sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)
    
    Running the test with following options:
    Number of threads: 40
    Initializing random number generator from current time
    
    
    Prime numbers limit: 20000
    
    Initializing worker threads...
    
    Threads started!
    
    CPU speed:
     events per second: 2127.81
    
    General statistics:
     total time: 4.986s
     total number of events: 10000
    
    Latency (ms):
     min: 1.72
     avg: 18.16
     max: 302.17
     5th percentile: 110.66
     sum: 181628.49
    
    Threads fairness:
     events (avg/stddev): 250.0000/30.81
     execution time (avg/stddev): 4.5407/0.10

    总结

    文档

    数据库性能测试之sysbench工具的安装与用法详解

    数据库性能测试之sysbench工具的安装与用法详解:1.简介和安装 sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。 官方站点:https://github.com/akopytov/sy
    推荐度:
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top