Mysqlslap是从5.1.4版开始的一个MySQL官方提供的压力测试工具。通过模拟多个并发客户端访问MySQL来执行压力测试,同时详细的提供了“高负荷攻击MySQL”的数据性能报告。并且能很好的对比多个存储引擎在相同环境下的并发压力性能差别。
--concurrency代表并发数量,多个可以用逗号隔开,concurrency=10,50,100,并发连接线程数分别是10、50、100个并发。
--engines代表要测试的引擎,可以有多个,用分隔符隔开。
--iterations代表要运行这些测试多少次。
--auto-generate-sql 代表用系统自己生成的SQL脚本来测试。
--auto-generate-sql-load-type 代表要测试的是读还是写还是两者混合的(read,write,update,mixed)
--number-of-queries 代表总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算。
--debug-info代表要额外输出CPU以及内存的相关信息。
--number-int-cols :创建测试表的int 型字段数量
--auto-generate-sql-add-autoincrement : 代表对生成的表自动添加auto_increment列,从5.1.18版本开始
--number-char-cols 创建测试表的char 型字段数量。
--create-schema 测试的schema,MySQL中schema也就是database。
--query 使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。
--only-print 如果只想打印看看SQL语句是什么,可以用这个选项。
mysqlslap -umysql-p123 --concurrency=100 --iterations=1 --auto-generate-sql--auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed--engine=myisam --number-of-queries=10 --debug-info
或:
指定数据库和sql语句:
mysqlslap-h192.168.3.18 -P4040 --concurrency=100 --iterations=1 --create-schema='test' --query='select* from test;' --number-of-queries=10--debug-info -umysql -p123
要是看到底做了什么可以加上:--only-print
Benchmark
Average number of seconds to run allqueries: 25.225 seconds
Minimum number of seconds to run allqueries: 25.225 seconds
Maximum number of seconds to run allqueries: 25.225 seconds
Number of clients running queries:100
Average number of queries perclient: 0
以上表明100个客户端同时运行要25秒
再如:
mysqlslap-uroot -p123456 --concurrency=100 --iterations=1 --engine=myisam--create-schema='haodingdan112' --query='select * Fromorder_boxing_transit where id = 10' --number-of-queries=1 --debug-info
模拟50个用户并发操作(select * from t5),迭代200次:
[root@PC ~]# mysqlslap -uroot -psystem@123 --create="createtable t5(id int);insert into t5(id) values(1);" --query="select *from t5;" --concurrency=50 --iterations=200 --delimiter=";"
Benchmark
Averagenumber of seconds to run all queries: 0.106 seconds
Minimumnumber of seconds to run all queries: 0.017 seconds
Maximumnumber of seconds to run all queries: 0.319 seconds
Numberof clients running queries: 50
Averagenumber of queries per client: 1
这个例子表示:建个测试表t5,在t5里插入一条记录。然后50个用户并发查询该表。
整个过程(建表,插入数据,查询数据)要迭代200次,结果表明,执行完所有查询的平均耗时为0.017秒,最大值为0.319秒,最小值为0.106秒。
注意,必须加上--delimiter=";"
否则有可能会报错:
mysqlslap: Cannot drop database 'mysqlslap'ERROR : Commands out of sync; you can't run this command now
注意:--create=里面create table不用指定数据库,默认是建在mysqlslap库里的。
mysql> select table_schema,table_namefrom information_schema.tables where table_name='t5';
+--------------+------------+
| table_schema | table_name |
+--------------+------------+
| mysqlslap | t5 |
+--------------+------------+
1 row in set (0.00 sec)
mysql> select * from t5;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.01 sec)
当模拟并发的命令执行完毕后,再查询,这个库和库里的表就会被自动删除了。
mysql> show processlist;
+-------+------+-----------+-----------+---------+------+----------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-------+------+-----------+-----------+---------+------+----------------+------------------+
| 8 | root | localhost | dba |Sleep | 4242 | | NULL |
| 20222 | root | localhost | mysqlslap |Query | 0 | NULL | show processlist |
| 50475 | root | localhost | mysqlslap |Sleep | 0 | | NULL |
| 53102 | root | localhost | mysqlslap |Query | 0 | NULL | select * from t5 |
| 53106 | root | localhost | mysqlslap |Query | 0 | NULL | select * from t5 |
| 53107 | root | localhost | mysqlslap |Query | 0 | NULL | select * from t5 |
| 53108 | root | localhost | mysqlslap |Query | 0 | Opening tables | select * from t5 |
| 53110 | root | localhost | mysqlslap |Query | 0 | NULL | select * from t5 |
| 53111 | root | localhost | mysqlslap |Sleep | 0 | NULL | NULL |
| 53112 | root | localhost | mysqlslap |Sleep | NULL | NULL | NULL |
| 53113 | root | localhost | mysqlslap |Query | 0 | NULL | select * from t5 |
| 53114 | root | localhost | mysqlslap |Sleep | NULL | NULL | NULL |
| 53115 | root | localhost | mysqlslap |Query | 0 | NULL | NULL |
| 53116 | root | localhost | mysqlslap |Query | 0 | Opening tables | select * from t5 |
多执行几次show processlist,发现正在执行select * from t5的id是不断变化的,时多时少。
--本篇文章参考自:http://blog.csdn.net/mr_mablevi/article/details/5881491