当前位置: 首页 > 工具软件 > mysqlslap > 使用案例 >

MySQL自带的数据库压力测试工具mysqlslap使用笔记

松旻
2023-12-01

基本介绍

mysqlslap 是 MySQL 从 5.1.4 版开始官方自带的一个压力测试工具。它通过模拟多个并发客户端访问 MySQL 来执行压力测试,我们通过结果信息可以了解数据库的性能状况。

涉及参数

--concurrency :并发量,也就是模拟多少个客户端同时执行命令。可指定多个值,以逗号或者 –delimiter 参数指定的值做为分隔符
--iterations :测试执行的迭代次数。
--number-int-cols :自动生成的测试表中包含多少个数字类型的列,默认 1 。此处设置为 1 的原因是,因为我们上面 sysbench 我们生成了一个 int 类型的字段。
--number-char-cols :自动生成的测试表中包含多少个字符类型的列,默认 1 。此处设置为 2 的原因是,因为我们上面 sysbench 我们生成了一个 char 类型的字段。
--auto-generate-sql :自动生成测试表和数据。这个命令,带来的效果,就类似 sysbench 命令的 prepare 指令。
--auto-generate-sql-add-autoincrement :增加 auto_increment 一列。
如果想看,生成的具体脚本,可以用 –only-print 指令,只打印测试语句而不实际执行。
--engine :创建测试表所使用的存储引擎,可指定多个。
--number-of-queries :总的测试查询次数(并发客户数×每客户查询次数)。
--create-schema :测试的 schema ,MySQL中 schema 也就是 database 数据库名。
-uroot -pMyNewPass4! :设置 MySQL 账号和密码。

简单用法

1、初步使用

我们执行如下命令对数据库做一个简单的自动测试,–auto-generate-sql 作用是自动生成测试 SQL。
注意:如果我们没有人为指定测试数据库,则默认是 mysqlslap(该数据库会自动创建,测试完毕自动删除)。

mysqlslap -uroot -p123456 --auto-generate-sql

2、运行结果

Average number of seconds to run all queries:运行所有语句的平均秒数
Minimum number of seconds to run all queries:运行所有语句的最小秒数
Maximum number of seconds to run all queries:运行所有语句的最大秒数
Number of clients running queries:客户端数量
Average number of queries per client:每个客户端运行查询的平均数

3、打印实际的测试过程

测试的过程需要生成测试表,插入测试数据,我们可以添加 --only-print 来打印实际的测试过程(不会实际执行):

mysqlslap -uroot -p123456 --auto-generate-sql --only-print

测试完成后会自动删除测试库。

4、添加并发

--concurrency=100:指定同时有 100 个客户端连接
--number-of-queries=1000:指定总的测试查询次数(并发客户端数 * 每个客户端的查询次数),这样本样例平均每个客户端查询 10 次

mysqlslap -uroot -p123456 --concurrency=100 --number-of-queries=1000 --auto-generate-sql

5、重复

使用 --iterations 参数可以设置迭代执行的次数,即重复的次数(相同的测试进行 N 次,求一个平均值)。该次数指的是整个步骤的重复次数,包括准备数据、测试 load、清理。

mysqlslap -uroot -p123456 --iterations=3 --concurrency=100 --number-of-queries=1000 --auto-generate-sql

6、自动生成复杂表

--number-int-cols=5:指定生成 5 个 int 类型的列
--number-char-cols=20:指定生成 20 个 char 类型的列

mysqlslap -uroot -pHangge_123 --number-int-cols=5 --number-char-cols=20 --auto-generate-sql

7、自行编写表与语句

--create-schema=agent:指定的测试库是 agent(测试完毕不会自动删除)
--query="SELECT * FROM t_call where id='123455';":使用自定义的测试语句

mysqlslap -uroot -p123456 --concurrency=10 --number-of-queries=100 --create-schema=agent --query="SELECT * FROM t_call where id='123455';"

查询语句也可以写多条,中间用封号隔开。

mysqlslap -uroot -pHangge_123 --concurrency=10 --number-of-queries=100 --create-schema=hangge --query="SELECT * FROM t_call where id='123455';SELECT * FROM t_call"

测试多个复杂的语句,我们也可以先把多个查询语句写入了一个 sql 文件中,然后使用此文件执行测试:
--query="select_query.sql":指定了测试文件是 select_query.sql
--delimiter=";":指定 sql 文件中语句间的分隔符是;

mysqlslap -uroot -p123456 --concurrency=10 --number-of-queries=100 --create-schema=agent --query="select_query.sql" --delimiter=";"

用自己的库插入测试时,会出现数据量不够的情况,那么如何使用这个工具快速生成大量工具呢?

我们执行如下命令实现数据插入,为提高效率这里开启 10 个客户端线程同时插入,总共执行 1 百万次操作:

mysqlslap -uroot -p123456 --concurrency=10 --number-of-queries=1000000 --create-schema=agent --query="
INSERT INTO 
t_call_test(id, call_id, SESSIONID, TYPE, PGS, ROLE, TXT, BG, ED, SPEED, AGENT_ID, CREATE_TIME, MODIFY_TIME) 
VALUES(uuid(), uuid(), uuid(), 1, 1,1, '你好,今天天气怎么样', 10, 20, 50, '100001', now(), now())"

执行完毕,服务器用时68.97秒,查看数据库发现已有。

 类似资料: