前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL基准测试工具:sysbench 新手入门体验

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

作者头像
看、未来
发布2022-05-06 14:36:25
3850
发布2022-05-06 14:36:25
举报
文章被收录于专栏:CSDN搜“看,未来”

文章目录

安装 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的基本语法如下:

代码语言:javascript
复制
sysbench [options]... [testname] [command]

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

代码语言:javascript
复制
prepare:为测试提前准备数据
run:执行正式的测试
cleanup:在测试完成后对数据库进行清理

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

代码语言:javascript
复制
sysbench ./tests/include/oltp_legacy/oltp.lua

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

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

MySQL连接信息参数

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

MySQL执行参数

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

使用示例

准备数据:

代码语言:javascript
复制
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秒生成一次报告。

执行测试:

代码语言:javascript
复制
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

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

清理数据:

代码语言:javascript
复制
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

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

结果分析

参数信息部分:

代码语言:javascript
复制
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

中间过程信息部分:

代码语言:javascript
复制
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

结果统计信息部分:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
queries:查询总数及qps

transactions:事务总数及tps

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

使用建议

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 安装 sysbench
  • sysbench语法
  • 使用示例
  • 结果分析
  • 使用建议
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档