mysqlslap的一个主要工作场景就是对数据库服务器做基准测试。

测试方法

1、测试工具:mysqlslap,mysqlslap是MySQL5.1.4之后自带的benchmark基准测试工具,该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。

2、测试流程:建立测试数据库database和待测试的表tables → 根据table的结构,利用脚本生成一定数量的有效随机数据 → 利用mysqlslap对相应query语句进行测试 → 结果数据的分析。

3、关键语句:考虑到资源平台的实际应用情况,通过资源属性查询资源的操作为主要操作,且这类操作的耗时占总操作耗时的比例为最大,故对应这类操作的查询语句为关键语句,对整个数据库性能影响很大,我们可以通过测试这个关键语句得出的结果来评估整个数据库的性能。

使用语法如下:

# mysqlslap [options]

常用参数 [options] 详细说明:

--auto-generate-sql, -a 自动生成测试表和数据,表示用mysqlslap工具自己生成的SQL脚本来测试并发压力。

--auto-generate-sql-load-type=type 测试语句的类型。代表要测试的环境是读操作还是写操作还是两者混合的。取值包括:read,key,write,update和mixed(默认)。

--auto-generate-sql-add-auto-increment 代表对生成的表自动添加auto_increment列,从5.1.18版本开始支持。

--number-char-cols=N, -x N 自动生成的测试表中包含多少个字符类型的列,默认1

--number-int-cols=N, -y N 自动生成的测试表中包含多少个数字类型的列,默认1

--number-of-queries=N 总的测试查询次数(并发客户数×每客户查询次数)

--query=name,-q 使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。

--create-schema 代表自定义的测试库名称,测试的schema,MySQL中schema也就是database。

--commint=N 多少条DML后提交一次。

--compress, -C 如果服务器和客户端支持都压缩,则压缩信息传递。

--concurrency=N, -c N 表示并发量,也就是模拟多少个客户端同时执行select。可指定多个值,以逗号或者--delimiter参数指定的值做为分隔符。例如:--concurrency=100,200,500。

--engine=engine_name, -e engine_name 代表要测试的引擎,可以有多个,用分隔符隔开。例如:--engines=myisam,innodb。

--iterations=N, -i N 测试执行的迭代次数,代表要在不同并发环境下,各自运行测试多少次。

--only-print 只打印测试语句而不实际执行。

--detach=N 执行N条语句后断开重连。

--debug-info, -T 打印内存和CPU的相关信息。

更详细的参数请查阅官网文档: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. 测试环境清理(删除创建的数据、表等,断开连接),使用单个连接。

1、建表:

通过属性查询资源需要两张表:设备表device和设备属性对应表deviceattr。device表对应资源,记录资源的基本信息,如name,type,group,creator等等;deviceattr表对应资源和属性的关系,记录每个资源的每个属性和属性值;它们的结构如下所示:

通过多个属性组合查询deviceattr表,获得相应的id ,id即是满足条件的设备id,进而能直接在device表中查询得到其基本属性。

本次测试的关键语句即是从deviceattr表中组合查询出满足条件的id,故本测试只需要用到deviceattr一张表。

2、生成随机数据并插入相应的表中:

这里编写了几个生成随机数据的sql函数rand_name(),rand_value(),rand_num(),rand_creator(),并编写了存储过程insert_devattr,用来将一定量数据批量插入deviceattr表中。

然后将整个建表和存储数据的过程写进一个sql脚本中,并在mysql中运行这个脚本,待测试的表和数据就建立好了。(sql脚本在附录)如下图所示,生成的deviceattr随机数据有4020条:

3、利用mysqlslap进行测试:

整个数据库的关键操作为通过属性查询资源,该操作的关键sql语句就是:

select id from deviceattr where [ n attr ] group by id;

例:查询拥有attr10或者attr20属性的所有资源的id为:

select id from deviceattr where name = ‘attr10’ or name = ‘attr20’ group by id;

在建立好待测数据库后,就可以利用mysqlslap进行测试,mysqlslap命令如下所示:

shell < mysqlslap --create-schema='test1' --query="select id from deviceattr where name='attr10' or name='attr20' group by id;" -c 50 -i 100

以上语句表示:使用test1数据库,使用query所指定的语句,测试50个并发查询,每一个查询100次。

该语句的测试结果如下图所示:

结果中可以看到执行语句的平均耗时,最大耗时和最小耗时,并发线程数等等。

附录:

生成测试数据的sql脚本:

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

mysql性能测试工具msyqlslap_mysqlslap工具测试mysql DB的性能相关推荐

  1. loadrunner mysql性能测试_运用Loadrunner测试Mysql数据库性能 TRON•极客

    1.前言 针对数据库的性能测试,loadrunner本身支持sql server和oracle数据库,这两种数据库可以用loadrunner直接录制进行测试.而我们项目中使用的是mysql数据库,针对 ...

  2. mysql jdbc 绑定变量_jdbc测试mysql数据库sql预解析(绑定变量)

    jdbc测试mysql数据库sql预解析(绑定变量) 用习惯了oracle,学习mysql,想测试一下mysql绑定变量的效果.以前看网上介绍大部份都说mysql没有sql共享池的概念,所以也不存在s ...

  3. mysql md5解密_Web渗透测试——Mysql数据库手工注入

    我们之前讲到了SQL注入漏洞是一种非常危险的高危漏洞,攻击者可以利用许多工具轻而易举的获得目标站点后台管理权限,我们也介绍了许多SQL注入利用工具,有网友问我,既然可以使用工具自动注入,为什么还要用手 ...

  4. CentOS 6.4 Heartbeat+mysql+nfs实现高可用的mysql集群

    一.Heartbeat网络架构 二.准备工作 1.操作系统 CentOS 6.4 X86-64 最小化安装 由于用源码编译安装heartbeat一直没有通过,所以没办法只能采用yum安装. heart ...

  5. mysql 安装导航_ubuntu下安装Mysql

    介绍 MySQL 是一种开源数据库管理系统,通常作为流行的LAMP(Linux,Apache,MySQL,PHP / Python / Perl)堆栈的一部分安装.它使用关系数据库和SQL(结构化查询 ...

  6. MySQL性能测试工具sysbench的安装和使用

    sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL.Oracle和PostgreSQL.当前 ...

  7. MySql性能测试工具-sysbench

    转自:MySql性能测试工具-sysbench - 没那么简单的博客 虽然mysql默认的有mysqlslap这个性能测试工具,但和sysbench比较来说,还逊色不少. 下载安装包 https:// ...

  8. mysql 工具_MySQL压力测试工具,值得收藏

    一.MySQL自带的压力测试工具--Mysqlslap mysqlslap是mysql自带的基准测试工具,该工具查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新 ...

  9. 测试 MySQL 性能的几款工具

    有一些有用的工具可以测试MySQL 和基于MySQL 的系统的性能.这里将演示如何利用这些工具进行测试. mysqlslap mysqlslap可以模拟服务器的负载,并输出计时信息.它包含在MySQL ...

最新文章

  1. Microsoft Dynamics AX 2009 新增功能 – 应用(目录)
  2. 用puthivestreaming把hdfs里的数据流到hive表
  3. Express中间件工作原理介绍
  4. mysql workbench画E-R图,并根据E-R生成sql(步骤超完整)
  5. Entity Framework 简单增删改操作
  6. Google 代码搜索
  7. 阿旺wifi智能系统源码
  8. python csv数据所在行_使用python获取csv文本的某行或某列数据的实例
  9. datax源代码编译安装
  10. java学习随笔(三)
  11. IDEA2019汉化教程,亲测有效,无内鬼,速
  12. 国家码信道顺从表(含数据库和配置)
  13. Android物理按键功能更改
  14. 二分算法实例应用(二)
  15. 【财富空间】华为HR总裁李杰:如何打造一支胜任的项目经理队伍?
  16. sql server中的while循环语句
  17. 微信小程序播放音乐并同步一次显示一行歌词
  18. vue 下载word文档时谷歌浏览器正常,IE下载文件损坏
  19. sql 导入linux问题:ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-m
  20. FIT5215 Deep learning学习经验贴

热门文章

  1. 破解xp(sp2)密码
  2. [CODEVS 1244] 云中通信
  3. POJ 3614-Sunscreen
  4. BZOJ 4386 Luogu P3597 [POI2015]Wycieczki (矩阵乘法)
  5. 用java设计一个二叉树类的结构,二叉树的基本结构以及java实现
  6. 4米乘以12米CAD图_SolidWorks转CAD时让字体格式相对完好的方法
  7. 2012自动登录服务器,配置Windows自动登录 - Windows Server | Microsoft Docs
  8. html修改按钮背景颜色,html鼠标悬浮在按钮上,让按钮背景变色
  9. opencv函数findcontours_OpenCV 中的轮廓应用
  10. # 起床困难综合症(二进制枚举+按位求贡献)