首页 > 数据库 >mysql自带的压力测试工具mysqlslap

mysql自带的压力测试工具mysqlslap

时间:2022-12-23 09:55:24浏览次数:46  
标签:mysqlslap return -- mysql number seconds queries 测试工具

mysql自带的压力测试工具mysqlslap,详情如下: 
重要参数: 
--concurrency代表并发数量,多个可以用逗号隔开,当然你也可以用自己的分隔符隔开,这个时候要用到--delimiter开关。 
--engines代表要测试的引擎,可以有多个,用分隔符隔开。 
--iterations代表要运行这些测试多少次。 
--auto-generate-sql 代表用系统自己生成的SQL脚本来测试。 
--auto-generate-sql-load-type 代表要测试的是读还是写还是两者混合的(read,write,update,mixed) 
--number-of-queries 代表总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算。比如倒数第二个结果2=200/100。 
--debug-info 代表要额外输出CPU以及内存的相关信息。 
--number-int-cols 代表示例表中的INTEGER类型的属性有几个。 
--number-char-cols 代表示例表中的char类型的属性有几个。 
--create-schema 代表自己定义的模式(在MySQL中也就是库)。 
--query 代表自己的SQL脚本。 
--only-print 如果只想打印看看SQL语句是什么,可以用这个选项。 
--auto-generate-sql-add-autoincrement  加自增长列 
--commit=N  多少条DML后提交一次 
--compress 如果服务器和客户端支持压缩,则压缩信息传递 
--detach=N  执行N条语句后断开重连 
--defaults-file=#  指定配置文件 
--delimiter 说明sql文件中语句间的分隔符是什么 
--debug-info 打印内存和cpu信息  ##这个参数没有得到验证 


1、添加并发 
[mysql@mysql-0001 ~]# mysql28/bin/mysqlslap --defaults-file=/dbdata/mysql5728/data3307/my3307.cnf    --concurrency=100  --number-of-queries=1000 --auto-generate-sql -uroot -p123456 -S /dbdata/mysql5728/data3307/my3307.sock 
mysqlslap: [ERROR] unknown variable 'default-character-set=utf8' 

原因: 
这是因为mysqlslap这个工具无法识别Mysql中的配置文件“my.cnf”或“my.ini”中的default-character-set=utf8这个指令 

解决办法: 
第一种解决方法: 
在MySQL的配置文件中 /etc/my.cnf 中将default-character-set=utf8 注释掉,但是,这需要重启MySQL服务,如果你的MySQL服务正在忙,那么,这样的代价会比较大。 

第二种解决方法: 
是直接以“mysqlslap --no-defaults  ******" 命令打开; 

[mysql@mysql-0001 ~]# mysql28/bin/mysqlslap --no-defaults  --concurrency=100  --number-of-queries=1000 --auto-generate-sql -uroot -p123456 -S /dbdata/mysql5728/data3307/my3307.sock  
mysqlslap: [Warning] Using a password on the command line interface can be insecure. 
Benchmark 
        Average number of seconds to run all queries: 0.254 seconds 
        Minimum number of seconds to run all queries: 0.254 seconds 
        Maximum number of seconds to run all queries: 0.254 seconds 
        Number of clients running queries: 100 
        Average number of queries per client: 10 
参数说明: 
--concurrency=100 指定同时有100个客户端连接 
--number-of-queries=1000 指定总的测试查询次数(并发客户端数 * 每个客户端的查询次数) 
2、自动生成复杂表 
[mysql@mysql-0001 ~]# mysql28/bin/mysqlslap --no-defaults     --concurrency=100,200  --number-of-queries=1000 --auto-generate-sql  --number-int-cols=5 --number-char-cols=20 -uroot -p123456 -S /dbdata/mysql5728/data3307/my3307.sock   
mysqlslap: [Warning] Using a password on the command line interface can be insecure. 
Benchmark 
        Average number of seconds to run all queries: 1.473 seconds 
        Minimum number of seconds to run all queries: 1.473 seconds 
        Maximum number of seconds to run all queries: 1.473 seconds 
        Number of clients running queries: 100 
        Average number of queries per client: 10 

Benchmark 
        Average number of seconds to run all queries: 1.231 seconds 
        Minimum number of seconds to run all queries: 1.231 seconds 
        Maximum number of seconds to run all queries: 1.231 seconds 
        Number of clients running queries: 200 
        Average number of queries per client: 5 
3、使用自己的测试库和测试语句 
写了几个生成随机数据的sql函数rand_name(),rand_value(),rand_num(),rand_creator(),并编写了存储过程insert_devattr,用来将一定量数据批量插入deviceattr表中。 

mysql> drop table if exists device,attr,deviceattr; 
Query OK, 0 rows affected, 3 warnings (0.00 sec) 
mysql> drop function if exists rand_name; 
Query OK, 0 rows affected, 1 warning (0.00 sec) 
mysql> drop function if exists rand_value; 
mysql> drop function if exists rand_num; 
mysql> drop function if exists rand_creator; 
mysql> drop procedure if exists insert_devattr; 
mysql> drop procedure if exists insert_dev; 

mysql> create table device     
    -> ( 
    -> id int primary key, 
    -> name varchar(40), 
    -> type varchar(40),     
    -> aquired int, 
    -> groupname varchar(40), 
    -> creator varchar(40) 
    -> ); 
     
mysql> create table attr 
    -> ( 
    -> id int primary key, 
    -> name varchar(40) 
    -> ); 
     
mysql> create table deviceattr 
    -> ( 
    -> id int, 
    -> name varchar(40), 
    -> value varchar(40) 
    -> ); 
mysql> delimiter // 
注意:mysql中的delimiter会告诉MySQL解释器,命令的结束符是什么,默认情况下MySQL的命令是以分号(;)结束的.在遇到(;)时,MySQL就可以执行命令了. 
例如: 
mysql>delimiter $ 
就是告诉MySQL解释器,当碰到$时,才执行命令. 
例1:mysql>select * from student;   #回车时就会执行这条语句 
例2:mysql>delimiter $ 
mysql>select * from student;   #回车时不会执行 
->$    #在此回车才会执行上述语句 
mysql>delimiter ;#将命令结束符重新设定为(;) 
mysql> 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// 
     
mysql> create function rand_num() 
    -> returns int 
    -> begin 
    -> declare n int default 0; 
    -> set n = floor(rand()*100); 
    -> return n; 
    -> end// 
mysql> 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// 
mysql> 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// 
mysql> 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// 
mysql> 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// 
mysql> call insert_devattr(0,4000)// 
Query OK, 1 row affected (25.18 sec) 

mysql> call insert_dev(11,100)// 
Query OK, 1 row affected (0.54 sec) 


[mysql@mysql-0001 ~]# mysql28/bin/mysqlslap --no-defaults     --concurrency=100  --number-of-queries=10000 --create-schema="test01" --query="select id from deviceattr where name ='attr10' or name ='attr20' group by id;"  -uroot -p123456 -S /dbdata/mysql5728/data3307/my3307.sock   
mysqlslap: [Warning] Using a password on the command line interface can be insecure. 
Benchmark 
        Average number of seconds to run all queries: 17.256 seconds 
        Minimum number of seconds to run all queries: 17.256 seconds 
        Maximum number of seconds to run all queries: 17.256 seconds 
        Number of clients running queries: 100 
        Average number of queries per client: 100 
         
5、对于复杂的sql语句使用脚本 
[mysql@mysql-0001 ~]# cat select_query.sql  
select id from deviceattr where name ='attr10' or name ='attr20' group by id; select * from deviceattr; 

[mysql@mysql-0001 ~]# mysql28/bin/mysqlslap --no-defaults     --concurrency=100  --number-of-queries=10000 --create-schema="test01" --query="/root/select_query.sql"  --delimiter=";"  -uroot -p123456 -S /dbdata/mysql5728/data3307/my3307.sock   
mysqlslap: [Warning] Using a password on the command line interface can be insecure. 
Benchmark 
        Average number of seconds to run all queries: 22.032 seconds 
        Minimum number of seconds to run all queries: 22.032 seconds 
        Maximum number of seconds to run all queries: 22.032 seconds 
        Number of clients running queries: 100 
        Average number of queries per client: 100

标签:mysqlslap,return,--,mysql,number,seconds,queries,测试工具
From: https://www.cnblogs.com/harda/p/17000065.html

相关文章

  • MySQL的一些常用命令
    mysql创建用户:createuser‘用户名’@‘%’identifiedby'密码';   #'%'表示所有地址都可以访问flushprivileges;   #刷新权限grantallon......
  • mysql 导出/导入数据库
    --Mysql--导出函数、存储过程---------------------mysqldump-uroot-paawwqqaa-ntd-Rshujuku>prorandfunc.sql--Mysql--导出表结构、数据---------------------......
  • 各厂使用的MySQL团队开发规范,太详细了,建议收藏!
    关注公众号:IT老哥,每天读一篇干货技术文章,一年后你会发现一个不一样的自己数据库对象命名规范数据库对象数据库对象全局命名规范数据库命名规范表命名规范......
  • MySQL锁机制
    1.表级锁&行级锁数据库中的锁通常分为两种:表级锁:对整张表加锁。开销小,加锁快,不会出现死锁。但是锁的粒度大,发生锁冲突的概率高,并发度低。行级锁:对某行记录加锁。开销大......
  • MySQL日志
    1.错误日志错误日志是MySQL中最重要的日志之一,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正......
  • Springboot+Mybatis+MySql下,mysql使用json类型字段存取的处理
    转载:Springboot+Mybatis+MySql下,mysql使用json类型字段存取的处理背景:1、mysql5.7开始支持json类型字段;2、mybatis暂不支持json类型字段的处理,需要自己做处理项目......
  • mysql操作源码
    packagecom.mysql;importjava.sql.*;publicclassMysqlTest{staticfinalStringdriver="com.mysql.cj.jdbc.Driver";staticfinalStringDB="jdbc:mysql://......
  • Mysql主从配置
    Mysql主从配置什么是主从同步?俩台机器:主库,从库主库,写数据都写到主库中从库,从库主要用来读数据原理mysql主从配置的流程大体如下所示:1master会将变动记录到二进制......
  • 图文结合带你搞懂MySQL日志之Error Log(错误日志)
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:KAiTO文章来源:社区原创往期回顾:图文......
  • MySQL触发器
    准备代码:CREATEDATABASEshopCHARACTERSETutf8COLLATEutf8_general_ci;useshop;CREATETABLE`users`(`id`int(11)unsignedNOTNULLAUTO_INCREMENT,......