MySQL基准测试工具:sysbench 新手入门体验

Posted 看,未来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基准测试工具:sysbench 新手入门体验相关的知识,希望对你有一定的参考价值。

文章目录

安装 sysbench

最初接触这个工具还是在两年前看《高性能mysql》的时候,那时候没安装上呀,就没弄了、
我就想起来现在 luasql 也没安装上,会不会过段时间这也不是事儿了。

1、wget https://github.com/akopytov/sysbench/archive/1.0.20.tar.gz
2、tar -zxvf 1.0.20.tar.gz
3、
sudo apt install -y automake
sudo apt install -y libtool
sudo apt install -y pkg-config
sudo apt install -y libmysqlclient-dev
4、cd cd sysbench-1.0.20/
5、./autogen.sh
6、./configure
7、sudo make -j
8、sudo make install
9、sysbench --version


sysbench语法

sysbench的基本语法如下:

sysbench [options]... [testname] [command]

command:sysbench要执行的命令,包括:

prepare:为测试提前准备数据
run:执行正式的测试
cleanup:在测试完成后对数据库进行清理

在新版本中,–test参数已经声明为废弃,可以不使用–test,而是直接指定脚本。

sysbench ./tests/include/oltp_legacy/oltp.lua

测试时使用的脚本为lua脚本,可以使用sysbench自带脚本,也可以自己开发。对于大多数应用,使用sysbench自带的脚本就足够了。


sysbench的options参数有很多,其中比较常用的包括:

MySQL连接信息参数

--mysql-host:MySQL服务器主机名,默认localhost;如果在本机上使用localhost报错,提示无法连接MySQL服务器,改成本机的IP地址应该就可以了。
--mysql-port:MySQL服务器端口,默认3306
--mysql-user:用户名
--mysql-password:密码

MySQL执行参数

--oltp-test-mode:执行模式,包括simple、nontrx和complex,默认是complex。simple模式下只测试简单的查询;nontrx不仅测试查询,还测试插入更新等,但是不使用事务;complex模式下测试最全面,会测试增删改查,而且会使用事务。可以根据自己的需要选择测试模式。
--oltp-tables-count:测试的表数量,根据实际情况选择
--oltp-table-size:测试的表的大小,根据实际情况选择
--threads:客户端的并发连接数
--time:测试执行的时间,单位是秒,该值不要太短,可以选择120
--report-interval:生成报告的时间间隔,单位是秒,如10

使用示例

准备数据:

sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=120 --report-interval=10 prepare

执行模式为complex,使用了10个表,每个表有10万条数据,客户端的并发线程数为10,执行时间为120秒,每10秒生成一次报告。

执行测试:

sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=120 --report-interval=10 run >> ./mysysbench.log

将测试结果导出到文件中,便于后续分析。

清理数据:

sysbench --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=sbtest --oltp-tables-count=10 --oltp-table-size=100000 ./tests/include/oltp_legacy/oltp.lua cleanup

执行完测试后,清理数据,否则后面的测试会受到影响。


结果分析

参数信息部分:

sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 10
Report intermediate results every 10 second(s)
Initializing random number generator from current time

中间过程信息部分:

Initializing worker threads...

Threads started!

[ 10s ] thds: 10 tps: 477.40 qps: 9560.77 (r/w/o: 6694.08/1910.89/955.80) lat (ms,95%): 29.72 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 10 tps: 451.43 qps: 9027.75 (r/w/o: 6319.48/1805.41/902.85) lat (ms,95%): 30.81 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 10 tps: 424.02 qps: 8484.10 (r/w/o: 5938.15/1697.90/848.05) lat (ms,95%): 33.12 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 10 tps: 410.76 qps: 8212.31 (r/w/o: 5749.55/1641.24/821.52) lat (ms,95%): 34.33 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 10 tps: 394.41 qps: 7885.10 (r/w/o: 5519.27/1577.02/788.81) lat (ms,95%): 35.59 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 10 tps: 395.00 qps: 7900.35 (r/w/o: 5530.06/1580.39/789.89) lat (ms,95%): 35.59 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 10 tps: 387.90 qps: 7758.49 (r/w/o: 5431.66/1551.02/775.81) lat (ms,95%): 36.89 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 10 tps: 386.48 qps: 7730.24 (r/w/o: 5410.45/1546.73/773.06) lat (ms,95%): 37.56 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 10 tps: 396.70 qps: 7936.20 (r/w/o: 5556.07/1586.72/793.41) lat (ms,95%): 36.24 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 10 tps: 400.21 qps: 8005.64 (r/w/o: 5604.10/1601.13/800.41) lat (ms,95%): 36.89 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 10 tps: 398.60 qps: 7970.64 (r/w/o: 5579.33/1594.11/797.20) lat (ms,95%): 36.89 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 10 tps: 393.49 qps: 7866.67 (r/w/o: 5506.31/1573.47/786.89) lat (ms,95%): 38.94 err/s: 0.00 reconn/s: 0.00

结果统计信息部分:

SQL statistics:
    queries performed:
        read:                            688464
        write:                           196704
        other:                           98352
        total:                           983520
    transactions:                        49176  (409.71 per sec.)
    queries:                             983520 (8194.14 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          120.0238s
    total number of events:              49176

Latency (ms):
         min:                                    8.24
         avg:                                   24.40
         max:                                  162.52
         95th percentile:                       35.59
         sum:                              1199824.71

Threads fairness:
    events (avg/stddev):           4917.6000/48.05
    execution time (avg/stddev):   119.9825/0.01

其中,对于我们比较重要的信息包括:

queries:查询总数及qps

transactions:事务总数及tps

Latency-95th percentile:前95%的请求的最大响应时间

使用建议

1、尽量不要在MySQL服务器运行的机器上进行测试。
2、可以逐步增加客户端的并发连接数,观察在连接数不同情况下,MySQL服务器的表现。
3、如果连续进行多次测试,注意确保之前测试的数据已经被清理干净。
4、在开始测试之前,应该首先明确:应采用针对整个系统的基准测试,还是针对MySQL的基准测试,还是二者都需要。
5、如果需要针对MySQL的基准测试,那么还需要明确精度方面的要求:是否需要使用生产环境的真实数据,还是使用工具生成也可以;前者实施起来更加繁琐。如果要使用真实数据,尽量使用全部数据,而不是部分数据。
6、基准测试要进行多次才有意义。
7、测试时需要注意主从同步的状态。
8、测试必须模拟多线程的情况,单线程情况不但无法模拟真实的效率,也无法模拟阻塞甚至死锁情况。


以上是关于MySQL基准测试工具:sysbench 新手入门体验的主要内容,如果未能解决你的问题,请参考以下文章

详解MySQL基准测试和sysbench工具(转)

mysql测试和sysbench工具详解

详解MySQL基准测试和sysbench工具

MySQL基准测试工具sysbench安装

sysbench工具和mysql的基准测试

mysql基准测试与sysbench工具