mysqlslap 压力测试工具

mysqlslap是mysql自带的一个性能压测工具;mysqlslap用于和其它的一些性能压测工具一样可以自己造数据进行压测。mysqlslap的报告比较简单主要体现在执行的时间方面,没有sysbench那样的tps、qps等更详细的包括。

参数

--auto-generate-sql    -a                     自动生成MySQL测试语句
--auto-generate-sql-add-autoincrement         添加AUTO_INCREMENT字段
--auto-generate-sql-execute-number=#          查询的个数
--auto-generate-sql-guid-primary              添加GUID字段
--auto-generate-sql-load-type=name            mixed:混合、update:更新、write:写入、key:读主键、read:查询
--auto-generate-sql-secondary-indexes=#       设置索引字段个数
--auto-generate-sql-unique-query-number=#     生成N条不同的query sql语句
--auto-generate-sql-unique-write-number=#     生成N条不同的write sql语句
--auto-generate-sql-write-number=#            每个线程write sql语句数量
--commit=#                         设置每多少条sql语句提交一次
--compress    -C                    启用压缩协议
--concurrency=#    -c                  客户端数量(并发量)
--create=name                          测试的SQL语句或文件
--create-schema=name                    测试的数据名
--csv=name                                    生产CSV格式数据文件
--debug    -#                          写调试日志(windows不可用) 如:mysqlslap -a -#"d:t:o,c:/debug.txt"
--debug-check                        测试后打印调试信息(windows不可用)
--debug-info    -T                            打印内存和CPU的相关信息
--default-auth=plugin                         验证插件
--delimiter=str    -F                         语句分隔符默认是 ;
--detach=#                                    执行N条语句后断开重连
--enable-cleartext-plugin                     启用明文身份验证插件
--engine=engine_name    -e                    测试引擎 如:mysqlslap -e"myisam"或-e"myisam,innodb"
--help                                        帮助信息
--host=host_name    -h                        数据库host
--iterations=#    -i                          重复运行的次数
--login-path=name                             登陆配置文件
--no-drop                                     测试后不删除schema
--number-char-cols=#    -x                    设置VARCHAR类型字段数量
--number-int-cols=#    -y                     设置INT类型字段数量
--number-of-queries=#                         每个客户端运行sql语句数量
--only-print                                  仅显示将被运行的SQL语句--delimiter选项影响
--password=password    -p                     数据库密码
--pipe                                        启用管道
--plugin-dir=path                             插件目录
--port=port_num    -P                         数据库端口
--post-query=value                            测试后执行的SQL语句
--post-system=str                             测试后执行的系统语句
--pre-query=value                             测试前执行的SQL语句
--pre-system=str                              测试前执行的系统语句
--protocol=type                               链接协议 tcp, socket, pipe
--query=value    -q                           测试的SQL语句 如:mysqlslap --query="SELECT * FROM t1"
--secure-auth                                 不要发送密码到服务器
--silent    -s                                不显示测试(静音测试)
--socket=path    -S                           连接服务器的socket
--ssl-ca=file_name
--ssl-capath=dir_name
--ssl-cert=file_name
--ssl-cipher=cipher_list
--ssl-crl=file_name
--ssl-crlpath=dir_name
--ssl-key=file_name
--ssl-verify-server-cert
--user=user_name    -u                        数据库用户名
--verbose    -v                               输出更多的信息
--version    -V                               版本信息

说明:
测试的过程需要生成测试表,插入测试数据,这个mysqlslap可以自动生成,默认生成一个mysqlslap的schema,如果已经存在则先删除。可以用--only-print来打印实际的测试过程,整个测试完成后不会在数据库中留下痕迹。
各种测试参数实例(-p后面跟的是mysql的root密码):
单线程测试。测试做了什么。

# 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