- 简介:mysqlslap
mysqlslap是MySQL5.1.4之后自带的基准测试工具,该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。
- 常用选项:mysqlslap
(见文章最后 “帮助列表01”)
- 测试案例:mysqlslap
说明:
测试的过程需要生成测试表,插入测试数据,这个mysqlslap可以自动生成,默认生成一个mysqlslap的schema,如果已经存在则先删除。可以用--only-print
来打印实际的测试过程,整个测试完成后不会在数据库中留下痕迹。
1) 单用户自动生成查询1次
# mysqlslap --host=47.95.100.100 --port=3306 --user=root --password='sss' --auto-generate-sql
mysqlslap: [Warning] Using a password on the command line interface can be insecure.
Benchmark
Average number of seconds to run all queries: 0.038 seconds
Minimum number of seconds to run all queries: 0.038 seconds
Maximum number of seconds to run all queries: 0.038 seconds
Number of clients running queries: 1
Average number of queries per client: 0
基准
运行所有查询的平均秒数:0.038秒
运行所有查询的最小秒数:0.038秒
运行所有查询的最大秒数:0.038秒
运行查询的客户机数量:1
每个客户端的平均查询数:0
2) 100用户(并发100) 1000次查询
# mysqlslap --host=47.95.100.100 --port=3306 --user=root --password='sss' --auto-generate-sql --concurrency=100 --iterations=1 --auto-generate-sql-load-type=mixed --auto-generate-sql-add-autoincrement --engine=innodb --number-of-queries=5000
3) 50用户(并发50) 生成int列数5个、char列数20个随机表
# mysqlslap --host=47.95.100.100 --port=3306 --user=root --password='sss' --concurrency=50 --number-int-cols=8 --number-char-cols=18 --auto-generate-sql
–number-int-cols=8 指定生成8个 int 类型的列
–number-char-cols=18 指定生成18个 char 类型的列
4) 使用自己的测试库测试语句
//如果是只读查询语句可以用原表,如果是有写入语句的,建议复制个库出来测试写
-- 并发100 ,自定义查询语句
# mysqlslap --host=47.95.100.100 --port=3306 --user=root --password='sss' --concurrency=100 --create-schema=aaa --query="SELECT * FROM device_request_message_log;"
–create-schema 用来指定测试库名称
–query 是自定义的测试语句
5) 使用sql脚本测试
实际使用时,一般是测试多个复杂的语句,可以定义一个脚本文件,例如
echo "SELECT * FROM aaa;SELECT * FROM bbb;" > /tmp/sqltest.sql
把多个查询语句写入了一个 sql 文件,然后使用此文件执行测试
# mysqlslap --host=47.95.100.100 --port=3306 --user=root --password='sss' --concurrency=100 --create-schema=aaa --query="ontest.sql" --delimiter=";"
–query 中指定了sql文件
–delimiter 说明sql文件中语句间的分隔符是什么
引用01:
单线程测试。测试做了什么。
# mysqlslap -a -uroot -p123456
多线程测试。使用–concurrency来模拟并发连接。
# mysqlslap -a -c 100 -uroot -p123456
迭代测试。用于需要多次执行测试得到平均值。
# mysqlslap -a -i 10 -uroot -p123456
# mysqlslap ---auto-generate-sql-add-autoincrement -a -uroot -p123456
# mysqlslap -a --auto-generate-sql-load-type=read -uroot -p123456
# mysqlslap -a --auto-generate-secondary-indexes=3 -uroot -p123456
# mysqlslap -a --auto-generate-sql-write-number=1000 -uroot -p123456
# mysqlslap --create-schema world -q "select count(*) from City" -uroot -p123456
# mysqlslap -a -e innodb -uroot -p123456
# mysqlslap -a --number-of-queries=10 -uroot -p123456
测试同时不同的存储引擎的性能进行对比:
# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --engine=myisam,innodb --debug-info -uroot -p123456
执行一次测试,分别50和100个并发,执行1000次总查询:
# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --debug-info -uroot -p123456
50和100个并发分别得到一次测试结果(Benchmark),并发数越多,执行完所有查询的时间越长。为了准确起见,可以多迭代测试几次:
# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --debug-info -uroot -p123456
帮助列表01
-?, --help Display this help and exit.
(显示帮助并退出)
-a, --auto-generate-sql
Generate SQL where not supplied by file or command line.
(自动生成sql语句)
--auto-generate-sql-add-autoincrement
Add an AUTO_INCREMENT column to auto-generated tables.
(将自动增量列添加到自动生成的表中)
--auto-generate-sql-execute-number=#
Set this number to generate a set number of queries to run.
(设置此数字以生成一组要运行的查询)
--auto-generate-sql-guid-primary
Add GUID based primary keys to auto-generated tables.
(将基于guid的主键添加到自动生成的表中)
--auto-generate-sql-load-type=name
Specify test load type: mixed, update, write, key, or read; default is mixed.
(指定测试加载类型:mixed、update、write、key或read;默认为mixed)
--auto-generate-sql-secondary-indexes=#
Number of secondary indexes to add to auto-generated tables.
(要添加到自动生成的表中的辅助索引数)
--auto-generate-sql-unique-query-number=#
Number of unique queries to generate for automatic tests.
(为自动测试生成的唯一查询数)
--auto-generate-sql-unique-write-number=#
Number of unique queries to generate for auto-generate-sql-write-number.
(为自动生成SQL写入编号而要生成的唯一查询数)
--auto-generate-sql-write-number=#
Number of row inserts to perform for each thread (default is 100).
(每个线程执行的行插入数(默认值为100))
--commit=# Commit records every X number of statements.
(每隔x条语句提交一次记录)
-C, --compress Use compression in server/client protocol.
(在服务器/客户端协议中使用压缩)
-c, --concurrency=name
Number of clients to simulate for query to run.
(要模拟以运行查询的客户端数)
--create=name File or string to use create tables.
(创建文件或字符串的名称)
--create-schema=name
Schema to run tests in.
(指定测试库名称)
-F, --delimiter=name
Delimiter to use in SQL statements supplied in file or command line.
(要在文件或中提供的SQL语句中使用的分隔符命令行)
-e, --engine=name Storage engine to use for creating the table.
(选择查询引擎)
-h, --host=name Connect to host.
(主机ip/域名)
-i, --iterations=# Number of times to run the tests.
(运行测试的次数)
--no-drop Do not drop the schema after the test.
(不要在测试后删除架构)
-x, --number-char-cols=name
Number of VARCHAR columns to create in table ifspecifying --auto-generate-sql.
(要在表ifspecifying中创建的varchar列数--自动生成SQL)
-y, --number-int-cols=name
Number of INT columns to create in table if specifying --auto-generate-sql.
(要在表ifspecifying中创建的int列数--自动生成SQL)
--number-of-queries=#
Limit each client to this number of queries (this is not exact).
(将每个客户机限制为这个数量的查询(这不准确))
--only-print Do not connect to the databases, but instead print out
(不要连接到数据库,而是打印出来)
-p, --password[=name]
Password to use when connecting to server.
(连接服务器的密码)
-P, --port=# Port number to use for connection.
(连接服务器的端口)
--protocol=name The protocol to use for connection (tcp, socket, pipe, memory).
(用于连接的协议(TCP、套接字、管道、内存))
-q, --query=name Query to run or file containing query to run.
(要运行的查询或包含要运行的查询的文件)
-s, --silent Run program in silent mode - no output.
(以静默模式运行程序-无输出)
-S, --socket=name The socket file to use for connection.
(用于连接的套接字文件)
-u, --user=name User for login if not current user.
(连接服务器的登陆名)
-V, --version Output version information and exit.
(输出版本并退出)