Mysql 性能测试工具 sysbench的安装和使用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

    工作上需要用到AWS和Azure的Mysql服务,需要测试比较一下两个云服务的性能。于是开始百度 + google,查找性能测试工具。最终决定用sysbench。

sysbench介绍

              sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。

数据库目前支持MySQL/Oracle/PostgreSQL。本文只是简单演示一下几种测试的用法,后续准备利用sysbench来对MySQL进行一系列的测试。具体的一些参数设置,需要根据不同的测试要求来进行调整。

安装

1. 下载安装包,地址 https://github.com/akopytov/sysbench

1
2
3
#wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.zip"
#unzip sysbench-1.0.zip
#cd sysbench-1.0

2. 安装依赖库

1
#yum install automake libtool -y

3. 开始安装

1
2
3
4
#./autogen.sh
#./configure
#ERROR: cannot find MySQL libraries. If you want to compile with MySQL support 没找到mysql库 需要用参数指定下 --with-mysql-includes和--with-mysql-libs
#./configure --with-mysql-includes=/alidata/server/mysql5.7/include/ --with-mysql-libs=/alidata/server/mysql5.7/lib/

4. 由于是yum安装的mysql,我也不知道路径在哪里。如何查找mysql的安装路径?

安装mysql-devel,才能使用mysql_config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#yum install -y mysql-devel
#mysql_config -help
Usage: /usr/bin/mysql_config-64 [OPTIONS]
Options:
--cflags         [-I/usr/include/mysql -g  -fstack-protector  -m64 -fPIC  -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing]
--cxxflags       [-I/usr/include/mysql -g  -fexceptions -fstack-protector  -m64 -fPIC  -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing]
--include        [-I/usr/include/mysql]
--libs           [-L/usr/lib64/mysql -lmysqlclient -lpthread -lm -lrt -ldl]
--libs_r         [-L/usr/lib64/mysql -lmysqlclient -lpthread -lm -lrt -ldl]
--plugindir      [/usr/lib64/mysql/plugin]
--socket         [/var/lib/mysql/mysql.sock]
--port           [0]
--version        [5.6.39]
--libmysqld-libs [-L/usr/lib64/mysql -lmysqld -lpthread -lm -lrt -lcrypt -ldl -laio -lnuma]
--variable=VAR   VAR is one of:
pkgincludedir [/usr/include/mysql]
pkglibdir     [/usr/lib64/mysql]
plugindir     [/usr/lib64/mysql/plugin]

5. 再次执行config,成功

1
2
# ./configure --with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib64/mysql
#make

6. 执行下命令:

1
2
3
4
5
6
#sysbench --help
#sysbench: error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory
#问题原因:sysbench无法找到mysql的库文件,可能是环境变量LD_LIBRARY_PATH没有设置,设置后即可解决该问题:
#export LD_LIBRARY_PATH=/alidata/server/mysql5.7/lib/lib
#sysbench --version
sysbench 1.0.12 ( using  bundled LuaJIT 2.1.0-beta2)

准备测试表和数据

1. 创建测试数据库:

1
mysql>create database dbtest;

2. 测试命令

1
2
3
4
5
6
#/home/mysql/sysbench-1.0/src/sysbench --test=/home/mysql/sysbench-1.0/tests/include/oltp_legacy/oltp.lua \
--mysql-host=mysql-host-ip --mysql-port=3306 --mysql-user=envision --mysql-password=password \
--mysql-db=dbtest --oltp-tables-count=10 --oltp-table-size=500000 \
--report-interval=10 -- rand -init=on --max-requests=0 \
--oltp-read-only=off --max- time =120 --num-threads=30 \
[ prepare | run | cleanup ]

##三选一

prepare 准备;

run 运行;

cleanup  清理数据。

注意最后一行,一项测试开始前需要用prepare来准备好表和数据,run执行真正的压测,cleanup用来清除数据和表。


3. 执行sysbench命令参数解释:

1
2
3
4
5
6
7
8
9
#-test=/root/sysbench-1.0/tests/include/oltp_legacy/oltp.lua 表示调用 oltp.lua 脚本进行 oltp 模式测试
#--oltp_tables_count=10 表示会生成 10 个测试表
#--oltp-table-size=500000 表示每个测试表填充数据量为 500000 
#--rand-init=on 表示每个测试表都是用随机数据来填充的
#-num-threads=8 表示发起 8个并发连接
#--oltp-read-only=off 表示不要进行只读测试,也就是会采用读写混合模式测试#--report-interval=10 表示每10秒输出一次测试进度报告
#--rand-type=uniform 表示随机类型为固定模式,其他几个可选随机模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累托)
#--max-time=120 表示最大执行时长为 120秒#--max-requests=0 表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长
#--percentile=99 表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值

4. 测试准备: 30个并发连接,10张表 每个表填充50W条数据 最大请求时间120s

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#/home/mysql/sysbench-1.0/src/sysbench --test=/home/mysql/sysbench-1.0/tests/include/oltp_legacy/oltp.lua \
--mysql-host=mysql-host-ip --mysql-port=3306 --mysql-user=envision --mysql-password=password \
--mysql-db=dbtest --oltp-tables-count=10 --oltp-table-size=500000 \
--report-interval=10 -- rand -init=on --max-requests=0 \
--oltp-read-only=off --max- time =120 --num-threads=30 \
prepare
Creating table  'sbtest1' ...
Inserting 100000 records into  'sbtest1'
Creating secondary indexes on  'sbtest1' ...
Creating table  'sbtest2' ...
Inserting 100000 records into  'sbtest2'
Creating secondary indexes on  'sbtest2' ...
......
Inserting 100000 records into  'sbtest9'
Creating secondary indexes on  'sbtest9' ...
Creating table  'sbtest10' ...
Inserting 100000 records into  'sbtest10'
Creating secondary indexes on  'sbtest10' ...

5. 执行sysbench测试,并输出测试报告

1
2
3
4
5
6
#/home/mysql/sysbench-1.0/src/sysbench --test=/home/mysql/sysbench-1.0/tests/include/oltp_legacy/oltp.lua \
--mysql-host=mysql-host-ip --mysql-port=3306 --mysql-user=envision --mysql-password=password \
--mysql-db=dbtest --oltp-tables-count=10 --oltp-table-size=500000 \
--report-interval=10 -- rand -init=on --max-requests=0 \
--oltp-read-only=off --max- time =120 --num-threads=128 \
run > /tmp/liang/mysql-report.txt

6. 查看测试报告

30个threads

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
sysbench 1.0.12 ( using  bundled LuaJIT 2.1.0-beta2)
Running the test with following options:
Number of threads: 30
Report intermediate results every 10 second(s)
Initializing random number generator from current  time
Initializing worker threads...
Threads started!
[ 10s ] thds: 30 tps: 188.63 qps: 3795.16 (r/w/o: 2659.89/755.31/379.96) lat (ms,95%): 223.34 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 30 tps: 177.80 qps: 3563.97 (r/w/o: 2496.95/711.31/355.71) lat (ms,95%): 248.83 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 30 tps: 177.20 qps: 3542.62 (r/w/o: 2479.82/708.30/354.50) lat (ms,95%): 235.74 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 30 tps: 189.60 qps: 3797.38 (r/w/o: 2658.99/759.20/379.20) lat (ms,95%): 227.40 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 30 tps: 190.40 qps: 3798.09 (r/w/o: 2655.29/762.20/380.60) lat (ms,95%): 211.60 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 30 tps: 179.70 qps: 3598.40 (r/w/o: 2520.50/718.40/359.50) lat (ms,95%): 235.74 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 30 tps: 187.30 qps: 3740.91 (r/w/o: 2617.61/748.50/374.80) lat (ms,95%): 227.40 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 30 tps: 187.40 qps: 3755.29 (r/w/o: 2630.19/750.40/374.70) lat (ms,95%): 211.60 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 30 tps: 188.10 qps: 3762.11 (r/w/o: 2632.80/753.10/376.20) lat (ms,95%): 211.60 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 30 tps: 183.70 qps: 3676.35 (r/w/o: 2575.16/733.69/367.49) lat (ms,95%): 227.40 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 30 tps: 190.80 qps: 3816.33 (r/w/o: 2671.42/763.41/381.50) lat (ms,95%): 211.60 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 30 tps: 195.49 qps: 3907.36 (r/w/o: 2733.40/783.17/390.79) lat (ms,95%): 204.11 err/s: 0.00 reconn/s: 0.00
SQL statistics:
     queries performed:
         read:                            313488 --读总数
         write:                           89568  --写总数
         other:                           44784 --其他操作(CURD之外的操作,例如COMMIT)
         total:                           447840 --全部总数
     transactions:                        22392  (186.27 per sec.) --总事务数(每秒事务数)
     queries:                             447840 (3725.43 per sec.) --总数(每秒总数)
     ignored errors:                      0      (0.00 per sec.)  --总忽略错误总数(每秒忽略错误次数)
     reconnects:                          0      (0.00 per sec.) --重连总数(每秒重连次数)
General statistics:
     total  time :                          120.2098s --总耗时
     total number of events:              22392 --共发生多少事务数
Latency (ms):
          min:                                  105.91 --最小耗时
          avg:                                  160.86 --平均耗时
          max:                                  850.77 --最长耗时
          95th percentile:                      223.34 --超过95%平均耗时
          sum:                              3601892.56
Threads fairness:
     events (avg/stddev):           746.4000/4.95 --总处理事件数/标准偏差
     execution  time  (avg/stddev):   120.0631/0.05--总执行时间/标准偏差


经过测试,AWS和Azure的mysql性能相差无几。sysbench的工具,使用起来也比较简单直观。适合对Mysql的简单性能测试。后续有时间,再研究一下sysbench对CPU,IO等性能测试的情况和使用感受。










本文转自 hsbxxl 51CTO博客,原文链接:http://blog.51cto.com/hsbxxl/2068181,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
235
分享
相关文章
MySQL原理简介—3.生产环境的部署压测
本文介绍了Java系统和数据库在高并发场景下的压测要点: 1. 普通系统在4核8G机器上每秒能处理几百个请求 2. 高并发下数据库建议使用8核16G或更高配置的机器 3. 数据库部署后需进行基准压测,以评估其最大承载能力 4. QPS和TPS的区别及重要性 5. 压测时需关注IOPS、吞吐量、延迟 6. 除了QPS和TPS,还需监控CPU、内存、磁盘IO、网络带宽 7. 影响每秒可处理并发请求数的因素包括线程数、CPU、内存、磁盘IO和网络带宽 8. Sysbench是数据库压测工具,可构造测试数据并模拟高并发场景 9. 在增加线程数量的同时,必须观察机器的性能,确保各硬件负载在合理范围
165 72
os-copilot安装_配置_功能测试全集
我是一位中级运维工程师,我平时工作会涉及到 各类服务器的 数据库 与 java环境配置 操作。 我顺利使用了OS Copilot的 -t -f | 功能,我的疑惑是不能在自动操作过程中直接给与脚本运行权限,必须需要自己运行一下 chmod 这个既然有了最高的权限,为什么就不能直接给与运行权限呢。 我认为 -t 功能有用,能解决后台运行基础命令操作。 我认为 -f 功能有用,可以通过task文件中撰写连续任务操作。 我认为 | 对文件理解上有很直接的解读,可以在理解新程序上有很大帮助。
187 86
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
74 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试
这篇文章是作者尚雷关于使用崖山YMP迁移Oracle/MySQL至YashanDB 23.2的验证测试分享。介绍了YMP的产品信息,包括架构、版本支持等,还详细阐述了外置库部署、YMP部署、访问YMP、数据源管理、任务管理(创建任务、迁移配置、离线迁移、校验初始化、一致性校验)及MySQL迁移的全过程。
Windows用户必备:Postman v11详细安装指南与API测试入门教程(附官网下载
Postman是全球领先的API开发与测试工具,支持REST、SOAP、GraphQL等协议调试。2025年最新版v11新增AI智能生成测试用例、多环境变量同步等功能,适用于前后端分离开发、自动化测试、接口文档自动生成及团队协作共享API资源。本文详细介绍Postman的软件定位、核心功能、安装步骤、首次配置、基础使用及常见问题解答,帮助用户快速上手并高效利用该工具进行API开发与测试。
OS-Copilot-ubuntu镜像版本的具体测试使用(安装方式有单独注明)
作为一名个人开发者,我主要负责云资源的运维和管理。在使用OS Copilot的过程中,我遇到了一些配置问题,特别是在ECS实例中设置AccessKey时,但最终成功解决了。通过使用OS Copilot的-t/-f/管道功能,我大大提升了效率,减少了命令编写的工作量,特别是在搭建Java运行环境时效果显著。此外,| 功能帮助我快速理解文档,整体体验非常流畅,推荐给其他开发者使用。
85 6
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
103 7
一些适合性能测试脚本编写和维护的工具
一些适合性能测试脚本编写和维护的工具
174 59
移动端性能测试工具
移动端性能测试工具
247 2
【赵渝强老师】MySQL的基准测试与sysbench
本文介绍了MySQL数据库的基准测试及其重要性,并详细讲解了如何使用sysbench工具进行测试。内容涵盖sysbench的安装、基本使用方法,以及具体测试MySQL数据库的步骤,包括创建测试数据库、准备测试数据、执行测试和清理测试数据。通过这些步骤,可以帮助读者掌握如何有效地评估MySQL数据库的性能。
207 5

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等