使用语法如下:
# mysqlslap [options]
常用参数 [options] 详细说明:
更详细的参数请查阅官网文档:https://dev.mysql.com/doc/refman/5.7/en/mysqlslap.html#option_mysqlslap_debug-info
说明:
测试的过程需要生成测试表,插入测试数据,这个mysqlslap可以自动生成,默认生成一个mysqlslap的schema,如果已经存在则先删除。可以用--only-print来打印实际的测试过程,整个测试完成后不会在数据库中留下痕迹。
mysqlslap的运行有如下3个步骤:
        1. 创建schema、table、test data 等,使用单个连接 (在MySQL中,schema就是database);
        2. 运行负载测试,可以使用多个并发客户端连接;
        3. 测试环境清理(删除创建的数据、表等,断开连接),使用单个连接。
|    use test1   drop table if exists device,attr,deviceattr;   drop function if exists rand_name;   drop function if exists rand_value;   drop function if exists rand_num;   drop function if exists rand_creator;   drop procedure if exists insert_devattr;   drop procedure if exists insert_dev;   create table device   (   id int primary key,   name varchar(40),   type varchar(40),   aquired int,   groupname varchar(40),   creator varchar(40)   );   create table attr   (   id int primary key,   name varchar(40)   );   create table deviceattr   (   id int,   name varchar(40),   value varchar(40)   );   delimiter //   create function rand_creator()   returns varchar(20)   begin   declare return_str varchar(20) default ‘aronhe‘;   declare n int default 0;   set n = floor(rand()*10);   case n   when 0 then set return_str = ‘aronhe‘;   when 1 then set return_str = ‘eeelin‘;   when 2 then set return_str = ‘shadowyang‘;   when 3 then set return_str = ‘luzhao‘;   when 4 then set return_str = ‘tommyzhang‘;   when 5 then set return_str = ‘pillarzou‘;   when 6 then set return_str = ‘allenpan‘;   when 7 then set return_str = ‘beyondli‘;   when 8 then set return_str = ‘minshi‘;   when 9 then set return_str = ‘bingchen‘;   else set return_str = ‘joyhu‘;   end case;   return return_str;   end//   create function rand_num()   returns int   begin   declare n int default 0;   set n = floor(rand()*100);   return n;   end//   create function rand_value()   returns varchar(10)   begin   declare return_str varchar(10) default ‘false‘;   declare n int default 0;   set n = floor(rand()*10);   case   when n<5 then set return_str = ‘false‘;   when n>5 then set return_str = ‘true‘;   else set return_str = ‘true‘;   end case;   return return_str;   end//   create function rand_name()   returns varchar(20)   begin   declare return_str varchar(20) default ‘‘;   set return_str = concat(‘attr‘,floor(rand()*200));   return return_str;   end//   create procedure insert_devattr(in start int,in max int)   begin   declare i int default 0;   repeat   set i=i+1;   insert into deviceattr values(rand_num(),rand_name(),rand_value());   until i =max   end repeat;   end//   create procedure insert_dev(in start int,in max int)   begin   declare i int default 10;   repeat   set i=i+1;   insert into device values(i,concat(‘runner‘,floor(rand()*100)),‘pc‘,floor(rand()*2),‘PCQQ‘,rand_creator());   until i =max   end repeat;   end//   call insert_devattr(0,4000)//   call insert_dev(11,100)// | 
实例
单线程测试。测试做了什么。
# 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
原文:https://www.cnblogs.com/zhuochong/p/10329899.html