Mysql官方性能测试工具mysqlslap的使用简介


Posted in MySQL onMay 21, 2021

简介

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 压测工具非常多,各个工具都有优劣,多了解一些工具,然后根据实际需求选择最合适的工具就能以最效率的方式完成需要的压力测试。

以上就是Mysql官方性能测试工具mysqlslap的使用简介的详细内容,更多关于mysqlslap的使用的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
MySQL 分页查询的优化技巧
May 12 MySQL
mysql 8.0.24版本安装配置方法图文教程
May 12 MySQL
Mysql数据库按时间点恢复实战记录
Jun 30 MySQL
详细聊聊MySQL中慢SQL优化的方向
Aug 30 MySQL
MySQL实例精讲单行函数以及字符数学日期流程控制
Oct 15 MySQL
MySQL中的引号和反引号的区别与用法详解
Oct 24 MySQL
MySQL表类型 存储引擎 的选择
Nov 11 MySQL
彻底解决MySQL使用中文乱码的方法
Jan 22 MySQL
详解MySql中InnoDB存储引擎中的各种锁
Feb 12 MySQL
一条 SQL 语句执行过程
Mar 17 MySQL
MySQ InnoDB和MyISAM存储引擎介绍
Apr 26 MySQL
MySQL GTID复制的具体使用
May 20 MySQL
MySQL官方导出工具mysqlpump的使用
May 21 #MySQL
新手必备之MySQL msi版本下载安装图文详细教程
MySQL数据库压缩版本安装与配置详细教程
MySQL 8.0 之不可见列的基本操作
May 20 #MySQL
Mysql Online DDL的使用详解
May 20 #MySQL
MySQL 存储过程的优缺点分析
May 20 #MySQL
IDEA 链接Mysql数据库并执行查询操作的完整代码
You might like
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
php如何获取文件的扩展名
2015/10/28 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
namespace.js Javascript的命名空间库
2011/10/11 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
BootStrap3学习笔记(一)之网格系统
2016/05/20 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
Spy++的使用方法及下载教程
2021/01/29 Python
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
入党思想汇报
2014/01/05 职场文书
运动会致辞稿50字
2014/02/04 职场文书
计划生育责任书
2015/05/09 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android
vue实力踩坑之push当前页无效
2022/04/10 Vue.js
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技