MySQL基准测试工具–sysbench

sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。主要包括以下几种方式的测试:

  • CPU性能
  • 磁盘IO性能
  • 调度程序性能
  • 内存分配及传输速度
  • POSIX线程性能
  • 数据库性能(OLTP基准测试)

sysbench的oltp主要是评估测试个数中不同系统参数下的数据库负载情况。目前sysbench的数据库测试支持Mysql、PostgreSQL、Oracle。

Sysbench安装使用

# 安装EPEL源,
$ yum install -y epel-release

# 直接安装sysbench
$ yum install -y sysbench

# 查看版本
$ sysbench --version
sysbench 1.0.17

Sysbench压测mysql

sysbench压测mysql流程:prepare(准备数据) -> run(运行测试) -> cleanup(清除数据)

安装sysbench会自带社区提供的lua脚本,可用于测试,这次主要使用(/usr/share/sysbench/oltp_read_only.lua)

  • 准备数据
sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password='123456' --mysql-db=dbtest --db-driver=mysql --tables=10 --table-size=1000000 --report-interval=10 --threads=128 --time=120 prepare
  • 压测
sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password='123456' --mysql-db=dbtest --db-driver=mysql --tables=10 --table-size=1000000 --report-interval=10 --threads=10 --time=120 run
  • 压测结果如下:
SQL statistics:
    queries performed:
        read:                            1774066 #总select数量
        write:                           0  # 总update/insert/delete语句数量
        other:                           253438 # commit,unlock tables以及其他mutex数量
        total:                           2027504
    transactions:                        126719 (1055.85 per sec.) # TPS
    queries:                             2027504 (16893.68 per sec.) # qps
    ignored errors:                      0      (0.00 per sec.) # 忽略的错误数
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          120.0136s # 即time指定压测实际时长
    total number of events:              126719 # 总的事件数,一般与transactions一样

Latency (ms):
         min:                                    4.37 # 最小响应时间
         avg:                                    9.47 # 平均响应时间
         max:                                   71.87 # 最大响应时间
         95th percentile:                       12.75 # 95%的语句平均响应时间
         sum:                              1199724.20 # 总响应时间

Threads fairness:
    events (avg/stddev):           12671.9000/803.09
    execution time (avg/stddev):   119.9724/0.00

一般关心response time avg,平均响应时间

transactions:精确的说这一项后面的TPS。可以用total number of evenets 除以总时间,得到tps

queries:用总查询量除以总时间,得到吞吐量QPS

  • 清除数据
sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password='123456' --mysql-db=dbtest --db-driver=mysql --tables=10 --table-size=1000000 --report-interval=10 --threads=128 --time=120 cleanup

Sysbench压测磁盘IO

对于Mysql服务器来说,一般用户可能关心的就是磁盘性能和OLTP性能,下面来测试一下磁盘性能(FILEIO)。对于磁盘性能测试,sysbench提供了以下测试选项

# 查看fileio测试帮助文档
$ sysbench fileio help
  • 准备数据
$ sysbench fileio --file-num=16 --file-total-size=2G prepare
  • 16个线程随机读取性能测试
$ sysbench fileio --time=180 --events=100000000 --threads=16 --file-num=16 --file-total-size=2G --file-test-mode=rndrd --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run
  • 测试结果
File operations:
    reads/s:                      4713.10    //磁盘IOPS;
    writes/s:                    0.00
    fsyncs/s:                    0.00

Throughput:
    read, MiB/s:                  73.64    //磁盘每秒速率;
    written, MiB/s:              0.00

General statistics:
    total time:                          180.0506s
    total number of events:              848617

Latency (ms):
        min:                                  0.09
        avg:                                  2.65
        max:                              1923.59
        95th percentile:                      0.24
        sum:                            2247207.75

Threads fairness:
    events (avg/stddev):          53038.5625/342.16
    execution time (avg/stddev):  140.4505/3.14

磁盘每秒读取4713次。73.64MiB/s

  • 清除测试环境
$ sysbench fileio --file-num=16 --file-total-size=2G cleanup