Mysql官方性能测试工具mysqlslap的使用简介
作者:王文安@DBA 发布时间:2024-01-23 18:38:46
目录
简介
使用介绍
实际体验
小结
简介
MySQL 作为最流行的开源数据库,在各个领域都有相当广泛的应用,作为一个 MySQL DBA,经常会对数据库进行一些性能测试来主动(或者是被动的)对业务压力做一个评估,来判断数据库当前的负载以及最高的性能容量。
常见的性能测试工具有 sysbench 和 tpcc,这两者都是非常优秀的压测工具,但是都需要特殊的编译或者安装,并且需要一定的开发能力才能修改具体测试的语句。
mysqlslap 则是随着 MySQL 安装的时候就自动安装好了,而且 mysqlslap 把很多的自定义测试的功能封装到了外部,使用者只需要在外部提供 SQL 语句的脚本就可以自定义测试语句,使用起来会简便一些。
使用介绍
mysqlslap 提供了非常多的参数来配置测试的项目的类型,这里仅摘选部分常用参数进行说明,详细信息参考 mysqlslap 自身的帮助信息。
参数名 | 说明 |
---|---|
login-path=# | 新版本 MySQL 提供的登录方式 |
-a, --auto-generate-sql | 自动生成 SQL 语句 |
--auto-generate-sql-add-autoincrement | 在自动生成的表中添加自增列 |
--auto-generate-sql-execute-number=# | 测试中,执行 SQL 的总次数 |
--auto-generate-sql-guid-primary | 生成基于 GUID 的主键 |
--auto-generate-sql-load-type=name | 测试的负载模型,包括 mixed, update, write, key,read,默认是 mix |
--auto-generate-sql-secondary-indexes=# | 自动生成的表中,二级索引的数量 |
--auto-generate-sql-unique-query-number=# | 测试中,使用唯一索引的查询语句数量 |
--auto-generate-sql-unique-write-number=# | 测试中,使用唯一索引的 DML 语句数量 |
--auto-generate-sql-write-number=# | 测试中,每个线程执行的 insert 语句数量,默认为 100 |
--commit=# | 测试中,每多少个语句执行一次 commit |
-c, --concurrency=name | 测试中,并发的线程数/客户端数 |
--create=name | 自定义建表语句,或者是 SQL 文件的地址 |
--create-schema=name | 测试中,使用的数据库名 |
--detach=# | 测试中,每执行一定数量的语句后进行重连 |
-e, --engine=name | 指定建表时的存储引擎 |
-h, --host=name | 指定测试实例的 host 地址 |
-u, --user=name | 指定测试实例的用户名 |
-p, --password=name | 指定测试实例的密码 |
-P, --port=# | 指定测试实例的端口 |
-i, --iterations=# | 指定测试重复的次数 |
--no-drop | 指定测试完成后不删除测试用的库表 |
-x, --number-char-cols=name | 指定测试表中 varchar 列的数量 |
-y, --number-int-cols=name | 指定测试表中 int 列的数量 |
--number-of-queries=# | 指定每个线程执行的 SQL 语句数量上限(不精确) |
--only-print | 类似于 dry run,输出会进行的操作,但是不会真的执行 |
-F, --delimiter=name | 使用文件中提供的 SQL 语句时,显式指定语句之间的分隔符 |
--post-query=name | 指定测试完成后,执行的查询语句,或者是 SQL 语句的文件 |
--pre-query=name | 指定测试开始前,执行的查询语句,或者是 SQL 语句的文件 |
-q, --query=name | 指定测试时,执行的查询语句,或者是 SQL 语句的文件 |
实际体验
这里对 mysqlslap 进行一次简单的试用,目标实例使用腾讯云数据库 MySQL,最简单的测试示例如下:
root@VM-64-10-debian:~# mysqlslap --concurrency=100 --iterations 10 -a --auto-generate-sql-add-autoincrement --engine=innodb --number-of-queries=1000 -h172.1.100.10 -uroot -p
Enter password:
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.046 seconds
Minimum number of seconds to run all queries: 0.042 seconds
Maximum number of seconds to run all queries: 0.049 seconds
Number of clients running queries: 100
Average number of queries per client: 10
root@VM-64-10-debian:~#
该示例中使用的就是最简单的测试模型,由 mysqlslap 自己生成所有的测试语句与建表语句。
如果要对不同并发下的性能做对比,则可以用这种方式进行测试:
root@VM-64-10-debian:~# mysqlslap --concurrency=100,200 --iterations 10 -a --auto-generate-sql-add-autoincrement --engine=innodb --number-of-queries=1000 -h172.16.0.40 -uroot -p
Enter password:
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.046 seconds
Minimum number of seconds to run all queries: 0.045 seconds
Maximum number of seconds to run all queries: 0.048 seconds
Number of clients running queries: 100
Average number of queries per client: 10
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.037 seconds
Minimum number of seconds to run all queries: 0.034 seconds
Maximum number of seconds to run all queries: 0.052 seconds
Number of clients running queries: 200
Average number of queries per client: 5
root@VM-64-10-debian:~#
输出的结果为时间,因此时间越小说明整体性能越好。
如果要自定义测试语句,则可以把 SQL 语句写在文件里面,例如:
root@VM-64-10-debian:~# cat create.sql
CREATE TABLE a (b int);INSERT INTO a VALUES (23);
root@VM-64-10-debian:~# cat query.sql
SELECT * FROM a;
SELECT b FROM a;
root@VM-64-10-debian:~#
root@VM-64-10-debian:~# mysqlslap --concurrency=100,200 --query=query.sql --create=create.sql --delimiter=";" --engine=innodb --number-of-queries=1000 -h172.16.0.40 -uroot -p
Enter password:
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.045 seconds
Minimum number of seconds to run all queries: 0.045 seconds
Maximum number of seconds to run all queries: 0.045 seconds
Number of clients running queries: 100
Average number of queries per client: 10
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.023 seconds
Minimum number of seconds to run all queries: 0.023 seconds
Maximum number of seconds to run all queries: 0.023 seconds
Number of clients running queries: 200
Average number of queries per client: 5
root@VM-64-10-debian:~#
小结
市面上可用的 MySQL 压测工具非常多,各个工具都有优劣,多了解一些工具,然后根据实际需求选择最合适的工具就能以最效率的方式完成需要的压力测试。
来源:https://cloud.tencent.com/developer/inventory/12428/article/1822678
猜你喜欢
- 如下所示:# 输入数字使其反向输出num = int(input("请输入一个数:"))i = 0num1 = numw
- 一、Shutil 模块shutil其实也就是shell模块。其中包含一些函数,可以让我们在python程序中复制、移动、改名和删除文件。1.
- 1.where中的子查询示例数据参见此文章案例:查询比最低工资高的员工姓名和薪资子查询,先查询子查询括号里的,再向上级进行查询mysql&g
- 解决方案在安装包的路径的../database/state/cvu/cvu_prereq.xml文件尾部添加如下:<OPERATING
- 使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就
- 调度和锁定在很多客户一起查询数据表时,如果使客户能最快地查询到数据就是调度和锁定做的工作了。在MySQL中,我们把select操作叫做读,把
- Spring @Enable 模块概览框架实现@Enable注解模块激活模块Spring Framework@EnableWebMvcWeb
- 对我当前工程进行全部测试需要花费不少时间。既然有 26 GB 空闲内存,为何不让其发挥余热呢? tmpfs 可以通过把文件系统保
- 1 前言很多程序都要求用户输入某种信息,程序一般将信息存储在列表和字典等数据结构中。用户关闭程序时,就需要将信息进行保存,一种简单的方式是使
- 前言有时候大家需要知道一个关键词在互联网上的热度,想知道某个关键词的热度变化趋势。大家可能就是使用百度指数、微信指数之类的。非常好用,但是就
- 前言我们项目中总是避免不了要使用一些定时任务,比如说最近的项目,用户点击报名考试以后需要在考试日期临近的时候推送小程序消息提醒到客户微信上,
- 一、所需工具**Python版本:**3.5.4(64bit)二、相关模块opencv_python模块sklearn模块numpy模块dl
- 经常会在连接DB的时候用到,就是不知道代表什么意思。。。RS.OPEN SQL,CONN,A,BA: ADOPENFORWARDONLY(=
- 1. 案例【三酷猫列表记账】操作需求:(1)用列表对象记录三酷猫每天钓鱼的种类和数量(2)统计三酷猫所钓水产品的总数量和预计收获金额(3)打
- 1 基本用法把序列乘以一个整数,就会产生一个新序列。这个新序列是原始序列复制了整数份,然后再拼接起来的结果。l=[1,2,3]l2=l *
- 口罩佩戴检测一 题目背景1.1 实验介绍今年一场席卷全球的新型冠状病毒给人们带来了沉重的生命财产的损失。有效防御这种传染病毒的方法就是积极佩
- 字符串字符串用''或者""括起来,如果字符串内部有‘或者",需要使用\进行转义>>
- 环境:Oracle 11.2.0.4 RAC(2 nodes)说明:假设新增闪存挂载点是/flash(使用了第三方的集群文件系统),如果是使
- 这个类主要解决在类型转换时,如果直接使用类型转换函数,会因为变量为空或者格式不对而导致程序报错,而这种报错在大多数情况下是允许的.例如要转换
- with语句会设置一个临时的上下文,交给上下文管理器对象控制,并且负责清理上下问题。这样做能避免错误并减少样板代码,因此API能更安全,更易