mysqlslap工具测试mysql DB的性能
使用语法如下:
# 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. 测试环境清理(删除创建的数据、表等,断开连接),使用单个连接。




|
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
mysqlslap工具测试mysql DB的性能的更多相关文章
- MySQL抓包工具:MySQL Sniffer 和性能优化
简介 MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer 端的请求,并格式化输出.输出内容包访问括时间.访问用户.来源 IP.访问 Database. ...
- mysqlslap详解--MySQL自带的性能压力测试工具(转)
本文的参考博客地址为:https://blog.csdn.net/fuzhongfaya/article/details/80943991 和 https://www.cnblogs.com/davy ...
- 使用Jmeter测试MySQL性能——(1)连接配置
在搭建MySQL集群之后需要测试集群的性能究竟如何,采用Apache的测试工具Jmeter进行测试,本文主要介绍主要实现Jmeter配置连接到MySQL. 安装相应的软件 首先Jmeter是基于Jav ...
- 使用Swoole测试MySQL在特定SQL下的并发性能
场景描述 从全文检索或者缓存中获取ID,根据ID查询数据库获取基础信息,进行页面展示 SQL:select * from table where id in(id1,id2,id3...id40) 此 ...
- 微软的开源Sonar工具测试网站的性能和安全性
Tips 原文作者:ABHIMANYU GHOSHAL 原文地址:Microsoft's open-source Sonar tool will test your site's performanc ...
- 有谁知道什么工具测试IOS手机上APP的性能软件啊?
有谁知道什么工具测试IOS手机上APP的性能软件啊?
- python测试mysql写入性能完整实例
这篇文章主要介绍了python测试mysql写入性能完整实例,具有一定借鉴价值,需要的朋友可以参考下 本文主要研究的是python测试mysql写入性能,分享了一则完整代码,具体介绍如下. 测试环境: ...
- 使用FIO工具测试块存储性能
Linux实例和Windows实例都推荐使用FIO工具测试块存储性能. 说明 您也可以使用其他工具测试块存储性能,但不同工具测试出来的硬盘基准性能会有差异,如dd.sysbench.iometer ...
- mysqlslap 压力测试使用总结
今天从运维同事那听说了mysql压力测试工具mysqlslap.经了解其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的.下面举例说说.mysqlslap是从5.1.4版开 ...
随机推荐
- scala 实现日期运算
在scala程序中,有时我们需要对日期进行运算,比如一天之前,两天之前,一个月之前等等,本博文给出了简单的实现方式 val cal = Calendar.getInstance cal.add(Cal ...
- STM32(1)——使用Keil MDK以及标准外设库创建STM32工程
转载来自:http://emouse.cnblogs.com 1.1 开发工具与开发环境 1. 软件版本 本节所使用Keil MDK 为目前的最新版V4.21.其他版本差别不大,读者可以根据自己使用的 ...
- python小白的初步爬虫
前序: 最近工作不是很忙,领导突然找我谈话,说是谈话,其实就是分配活呗.果不其然,很快进入正题, 给了我一个网址链接,然后说需要商品的信息...巴拉巴拉.好吧,去做吧. 我当时的内心是崩溃的,pyt ...
- Java集合——ArrayList源码详解
) ArrayList 实现了RandomAccess, Cloneable, java.io.Serializable三个标记接口,表示它自身支持快速随机访问,克隆,序列化. public clas ...
- 【BZOJ5290】[HNOI2018]道路(动态规划)
[BZOJ5290][HNOI2018]道路(动态规划) 题面 BZOJ 洛谷 题目直接到洛谷上看吧 题解 开始写写今年省选的题目 考场上我写了一个模拟退火骗了\(90\)分...然而重测后只剩下45 ...
- 优步UBER司机全国各地奖励政策汇总 (2月15日-2月21日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 全国Uber优步司机奖励政策 (1月4日-1月10日)
本周已经公开奖励整的城市有:北 京.成 都.重 庆.上 海.深 圳.长 沙.佛 山.广 州.苏 州.杭 州.南 京.宁 波.青 岛.天 津.西 安.武 汉.厦 门,可按CTRL+F,搜城市名快速查找. ...
- python字符串的方法介绍
博文取自鱼C论坛文章: http://bbs.fishc.com/forum.php?mod=viewthread&tid=38992&extra=page%3D1%26filter% ...
- Android性能测试 | 启动时间篇
[转载]原文地址:http://www.51testing.com/html/93/n-3724593.html 背景介绍 Android用户也许会经常碰到以下的问题: 1)应用后台开着,手机很快没电 ...
- 「题目代码」P1066~P1070(Java)
P1066 谭浩强C语言(第三版)习题8.6 import java.util.*; import java.io.*; import java.math.*; import java.lang.Ch ...