mysqlslap压力测试

来源:互联网 发布:无人机测绘软件 编辑:程序博客网 时间:2024/05/17 22:30

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_name from 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

 

0 0
原创粉丝点击