mysqlslap介绍和使用
mysqlslap是一个MySQL自带的负载仿真工具,它可以在模拟多个客户端对MySQL服务器进行并发执行SQL语句,还可以指定存储引擎。
1. 调用方式
$./mysqlslap [options]
2. 执行步骤
mysqlslap分三个阶段运行
- 创建数据库,表以及可选的任何存储程序或数据以用于测试。此阶段使用单个客户端连接。
- 运行负载测试。此阶段可以使用许多客户端连接。
- 清理(断开连接,删除表–如果指定的话)。此阶段使用单个客户端连接。
3. 测试方式
mysqlslap有三种测试方式
3.1 指定SQL语句
--create
:指定表创建语句和插入语句。
--query
:指定查询时执行的语句,不一定要是Select语句,可以是任意SQL语句。
--delimiter
:指定分隔符为";"
--concurrency
: 并发时模拟客户端的数量。可以指定多个值逗号隔开。
--iterations
: 测试执行的次数。
使用create和query指定SQL语句,5个客户端并发查询,执行10次。
$./mysqlslap --delimiter=";"
--create="CREATE TABLE `t1` (intcol1 INT(32) ,intcol2 INT(32) );"
--query="SELECT * FROM t1" --concurrency=5 --iterations=10
3.2 自动生成SQL
--auto-generate-sql
:指定自动生成查询语句,还有其他–auto开头参数可以具体配置查询内容。
--number-int-cols
:指定创建表有几个INT列
--number-char-cols
: 指定创建表有几个VARCHAR列
自动生成SQL语句测试,使用的表有2个INT列,2个VARCHAR,5个客户端并发查询,执行10次。
$./mysqlslap --concurrency=5 --iterations=10
--number-int-cols=2 --number-char-cols=2
--auto-generate-sql
3.3 指定SQL文件
--create
和--query
还可以指定文件,语句以分隔符分开,注意文件中不能包含注释。
--create
:指定文件,文件中包含多个以分隔符分隔的语句,表创建语句和插入语句。
--query
:指定文件,文件将包含多个以分隔的查询语句,不一定要是Select语句,可以是任意SQL语句。
--delimiter
:指定分隔符。
$./mysqlslap --concurrency=5 --iterations=10 --delimiter=";"
--query=query.sql --create=create.sql
4. 选项
mysqlslap 支持以下选项
选项名 | 描述 |
---|---|
--auto-generate-sql | 文件中未提供或未使用命令选项时自动生成SQL语句 |
--auto-generate-sql-add-autoincrement | 将AUTO_INCREMENT列添加到自动生成的表中 |
--auto-generate-sql-execute-number | 指定自动生成多少个查询 |
--auto-generate-sql-guid-primary | 将基于GUID的主键添加到自动生成的表中 |
--auto-generate-sql-load-type | 指定测试负载类型,代表要测试的是读还是写还是两者混合的(read,write,update,mixed) |
--auto-generate-sql-secondary-indexes | 指定要添加到自动生成的表中的二级索引的数量 |
--auto-generate-sql-unique-query-number | 为自动测试生成多少个不同的查询 |
--auto-generate-sql-unique-write-number | 为–auto-generate-sql-write-number生成多少个不同的查询 |
--auto-generate-sql-write-number | 每个线程要执行多少行插入 |
--commit | 提交前要执行多少条语句 |
--compress | 压缩客户端和服务器之间发送的所有信息 |
--concurrency | 并发时要模拟的客户端数量 |
--create | 包含用于创建表的语句的文件或字符串 |
--create-schema | 运行测试的schema |
--csv | 生成以逗号分隔的值格式的输出 |
--debug Write | 编写调试日志 |
--debug-check | 程序退出时打印调试信息 |
--debug-info | 程序退出时打印调试信息,内存和CPU统计信息 |
--default-auth | 身份验证插件使用 |
--defaults-extra-file | 除了通常的选项文件,还读取命名的选项文件 |
--defaults-file | 只读命名的选项文件 |
--defaults-group-suffix | 选项组后缀值 |
--delimiter | 在SQL语句中使用的定界符 |
--detach | 在每条N条语句后分离(关闭并重新打开)每个连接 |
--enable-cleartext-plugin | 启用明文身份验证插件 |
--engine | 用于创建表的存储引擎 |
--help | 显示帮助信息并退出 |
--host | MySQL服务器所在的主机 |
--iterations | 运行测试的次数 |
--login-path | 从.mylogin.cnf中读取登录路径选项 |
--no-defaults | 不读取选项文件 |
--no-drop | 不要删除测试运行期间创建的任何schema |
--number-char-cols | 如果指定了–auto-generate-sql,则要使用的VARCHAR列数 |
--number-int-cols | 如果指定了–auto-generate-sql,则要使用的INT列数 |
--number-of-queries | 将每个客户端限制为大约此查询数量 |
--only-print | 不连接数据库。只打印它会做的事情 |
--password | 连接服务器时使用的密码 |
--pipe | 使用命名管道连接到服务器(仅Windows) |
--plugin-dir | 安装插件的目录 |
--port | 用于连接的TCP / IP端口号 |
--post-query | 包含要在测试完成后执行的语句的文件或字符串 |
--post-system | 测试完成后使用system()执行的字符串 |
--pre-query | 包含要在运行测试之前执行的语句的文件或字符串 |
--pre-system | 在运行测试之前使用system()执行的字符串 |
--print-defaults | 打印默认选项 |
--protoco l | 使用的连接协议 |
--query | 包含用于检索数据的SELECT语句的文件或字符串 |
--secure-auth | 不要以旧(4.1之前)格式向服务器发送密码 |
--shared-memory-base-name | 用于共享内存连接的共享内存的名称 |
--silent | 静音模式 |
--socket | Unix套接字文件或Windows命名管道使用 |
--ssl | 启用连接加密 |
--ssl-ca | 包含受信任的SSL证书颁发机构列表的文件 |
--ssl-capath | 包含受信任的SSL证书颁发机构证书文件的目录 |
--ssl-cert | 包含X.509证书的文件 |
--ssl-cipher | 连接加密的允许密码 |
--ssl-crl | 包含证书吊销列表的文件 |
--ssl-crlpath | 包含证书吊销列表文件的目录 |
--ssl-key | 包含X.509密钥的文件 |
--ssl-mode | 与服务器连接的所需安全状态 |
--ssl-verify-server-cert | 根据服务器证书的公用名身份验证主机名 |
--user | 连接服务器时要使用的MySQL用户名 |
--verbose | 详细模式 |
--version | 显示版本信息并退出 |
5. 常用参数
--auto-generate-sql
:自动生成SQL语句。
--auto-generate-sql-execute-number
:指定自动生成多少个查询。
--auto-generate-sql-load-type
:指定测试负载类型,read,write,update,mixed。
--number-char-cols
: 如果指定了–auto-generate-sql,则要使用的VARCHAR列数。
--number-int-cols
: 如果指定了–auto-generate-sql,则要使用的INT列数。
--concurrency
: 并发时要模拟的客户端数量。
--iterations
: 运行测试的次数。
--create
: 包含用于创建表的语句的文件或字符串。
--query
: 包含用于检索数据的SELECT语句的文件或字符串。
--delimiter
: 在SQL语句中使用的定界符。
--engine
: 用于创建表的存储引擎,值可以通过“show engines;”命令查看。
--help
: 显示帮助信息并退出。
--no-drop
: 不要删除测试运行期间创建的任何schema。schema在MySQL对应的是数据库。
--only-print
: 不连接数据库。只打印它会做的事情。可用于查看测试执行的语句。
--post-query
: 包含要在测试完成后执行的语句的文件或字符串。SQL语句。
--post-system
: 测试完成后使用system()执行的字符串。系统命令。
--pre-query
: 包含要在运行测试之前执行的语句的文件或字符串。SQL语句。
--pre-system
: 在运行测试之前使用system()执行的字符串。系统命令。
6.查询结果
Benchmark
Average number of seconds to run all queries: 149.766 seconds
Minimum number of seconds to run all queries: 149.766 seconds
Maximum number of seconds to run all queries: 149.766 seconds
Number of clients running queries: 5
Average number of queries per client: 100
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: 并发模拟客户端数量,对应–concurrency配置值。
Average number of queries per client: 平均每个客户端执行语句数量。自动生成语句时,由--auto-generate-sql-execute-number
指定。或者是--number-of-queries
指定,平均执行数=--number-of-queries
/--concurrency
。