MySQL从5.1.4版开始带有一个压力测试工具mysqlslap,通过模拟多个并发客户端访问mysql来执行测试,
使用起来非常的简单。通过mysqlslap --help可以获得可用的选项,这里列一些主要的参数,更详细的说明参
考官方手册。
--auto-generate-sql, -a
自动生成测试表和数据
--auto-generate-sql-load-type=type
测试语句的类型。取值包括:read,key,write,update和mixed(默认)。
--number-char-cols=N, -x N
自动生成的测试表中包含多少个字符类型的列,默认1
--number-int-cols=N, -y N
自动生成的测试表中包含多少个数字类型的列,默认1
--number-of-queries=N
总的测试查询次数(并发客户数×每客户查询次数)
--query='SQL',(--query缩写为-q)
使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。
--create-schema
测试的schema,MySQL中schema也就是database,指定需要测试地数据库
--ommint=N
多少条DML后提交一次
--compress, -C
如果服务器和客户端支持都压缩,则压缩信息传递
–concurrency=N, -c N
并发量,也就是模拟多少个客户端同时执行select。可指定多个值,以逗号或者–delimiter参数指定的值做为分隔符
--engine=engine_name, -e engine_name
创建测试表所使用的存储引擎,可指定多个,可以测试sql在不同引擎下地效果
--terations=N, -i N
测试执行的迭代次数
--detach=N
执行N条语句后断开重连
--debug-info, -T
打印内存和CPU的信息
--only-print
只打印测试语句而不实际执行
下面是我在ubuntu上测试的一个例子:
root@Cyrec-desktop:~# mysqlslap --concurrency=50,100 --number-of-queries 1000 --debug-info --create-schema='student' --iterations=5 --engine=myisam,innodb --query='select * from student limit 20' -uroot -pxxxx > log.txt
解释一下: --concurrency=50,100分别模拟50和100个并发的情况,--number-of-queries 总共执行查询
1000次, --create-schema='student'设置执行sql的数据库,开始测试地时候没写这个选项报如下错误:
mysqlslap: Error when connecting to server: 1049 Unknown database 'mysqlslap',找了很久才发现
原来我开始没看到 --create-schema参数可以选择数据库,将选择数据库写成了sql'use student;'放入--query
参数中,结果就报错 --iterations=5设置迭代数,可以增加准确度。 --query='select * from student limit 20'测
试的sql语句(我是随便写的)当然还可以执行一些事务处理的sql不过就要申明使用innodb引擎。-u root
-pxxxx输入数据库的用户名密码 ,最后 > log.txt是将结果导出到文件中,也可以不导出直接在终端查看结果。
测试地结果如下:
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.392 seconds
Minimum number of seconds to run all queries: 0.338 seconds
Maximum number of seconds to run all queries: 0.443 seconds
Number of clients running queries: 50
Average number of queries per client: 20
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.433 seconds
Minimum number of seconds to run all queries: 0.411 seconds
Maximum number of seconds to run all queries: 0.486 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.361 seconds
Minimum number of seconds to run all queries: 0.331 seconds
Maximum number of seconds to run all queries: 0.407 seconds
Number of clients running queries: 50
Average number of queries per client: 20
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.446 seconds
Minimum number of seconds to run all queries: 0.372 seconds
Maximum number of seconds to run all queries: 0.550 seconds
Number of clients running queries: 100
Average number of queries per client: 10
User time 0.12, System time 4.36
Maximum resident set size 4180, Integral resident set size 0
Non-physical pagefaults 8852, Physical pagefaults 1, Swaps 0
Blocks in 192 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 35791, Involuntary context switches 2393
总结:mysqlslap内置工具使用比较方便,可以模拟并发以及不同mysql引擎来进行sql的测试。