使用mydbtest进行mysql压测

mydbtest简介

mydbtest是一款轻量级的mysql数据库压测工具,由OneProxy创始人楼方鑫编写,mydbtest相较于sysbench压测工具,功能单一,但是安装部署操作简单,只需要简单的配置,就可以进行压测,非常方便。

mydbtest主要运行在linux上,64位下载地址 : mydbtest_linux64.bin

安装部署

免安装,直接解压可用。需要注意的是,压测机器上面必须装有mysql客户端工具,即确保能正常运行mysql命令。

配置

配置文件包含以下几块内容:

  • option : 控制选项
  • declare : 声明变量,可以用到压测SQL中,组成动态的SQL
  • begin … end : 在begin和end中间编写压测过程中使用的SQL语句

option

主要包含以下选项的配置:

  • name

指定压测用例名,只体现在测试报告里面,对压测没有任何实际影响

  • user

数据库连接信息,格式为 user/password@hostname:ip:database

  • loop

控制测试执行次数,默认为1亿次,压测通常控制压测时间(time配置选项),这个参数并不常用。

  • wait

两次执行(所有定义的语句被执行算一次)之间的暂停时间,单位为 0.1 毫秒,不是指两个 SQL 语句之间的暂停时间。默认值为 0 表示没有任何停顿,用大并发测试时需要指定一个暂停时间,若未定义则在超过 1000 个并发线程压测时会计算一个默认值。

  • log

输出日志文件名,默认输出到屏幕。如果不想输出任何信息,可以定义为/dev/null

  • time

指定测试时间,默认值为3600,即1个小时。默认单位为s,也可以指定m或者h来代表分钟和小时,eg : 5m表示5分钟,1h表示1小时。注意,此参数与loop参数互斥,不可同时配置。

  • show

报告时间间隔,每隔多少秒输出统计报告。默认值为300,即5分钟。

  • tran

事务模式开关,默认值为OFF,表示运行在自动提交模式,每一个SQL会被当作一个事务,执行成功则提交;如果设置为ON,则第一条SQL执行之前会有一个开启事务的调用,所有SQL执行完成后,会有一个事务提交命令。

  • commit

事务大小参数,默认值为1,表示每执行1次测试发1次提交命令,此参数只在事务模式下有效,即tran参数应该配置为ON

declare

定义测试过程中用的变量,在测试SQL中可以使用这些变量。mydbtest会根据变量类型,生成随机数值,从而实现SQL的随机。

declare定义变量的格式如下所示:

变量名 变量类型 最小值 最大值
or
变量名 变量类型 值列表

变量类型有如下几类:

  • seq

自增的32位整数,从最小值递增到最大值,超过最大值则从最小值从头开始循环使用。eg:

vid1 seq 1 10000
vid2 seq 1 20000
  • int

32位的随机整数,随机范围在最小值和最大值之间。eg:

vid int 10000 20000

上述定义表示vid取值在10000到20000之间。注意,随机生成的值可能重复。

  • intlist

从给定的值里面随机选择一个整数,多个数值用逗号隔开。eg:

vid intlist 1,2,3,4,5
  • char

字符串类型,需要定义最小长度和最大长度,字符串长度将在最小长度和最大长度之间随机。如果想生成定长的字符串,那么请将最小长度和最大长度设定为一样的长度。eg:

vchar1 char 10 20
vchar2 char 10 10
  • strlist

从给定的字符串列表中随机选取一个字符串。多个字符串之间用逗号隔开。限制字符串的值不能包含空格,两个字符串之间不能带空格。eg:

vstr strlist a,aa,aaa
  • float and double

低精度浮点数 和 高精度浮点数,取值在最小值和最大值之间。eg:

v_float 1 10000
v_double 1 10000
  • date

自动生成的具有日期格式YYYY-MM-DD的字符串,需要指定日期范围,开始日期为当前日期减最小值,结束日期为当前日期加最大值。例如指定值“-10”表示开始日期为10天前,指定”10”表示10天后。eg:

V_date1 date -10 10
V_date2 date -30 30
  • timestamp

自动生成的具有日期格式YYYY-MM-DD HH24:MI:SS的字符串,需要指定日期范围,开始日期为当前日期减最小值,结束日期为当前日期加最大值。例如指定值“-10”表示开始日期为10天前,指定”10”表示10天后。eg:

V_datetime1 timestamp -10 10
V_datetime2 timestamp -10 10

SQL

在begin和end之间编写你要压测的sql,在sql中可以使用在 ”declare” 块声明的变量,变量的引用方式为如下所示,eg:

declare
vid int 1 10000
begin
select * from t1 where id = :vid;
end

完整示例配置

一个完整的配置文件示例:

option
  user mydbtest/mydbtest@10.202.7.88:3306:test
  log /dev/null
  time 2m
declare
  vid seq 10000000 20000000
  vk int 10 10000000
  vc char 800 800
  vpad char 200 200
begin
 insert into mydbtest(id,k,c,pad) values (:vid,:vk,:vc,:vpad);
end

运行

执行以下命令运行压测:

./mydbtest_linux64.bin query=query.cnf degree=32

参数说明:

  • query : 指定具体的配置文件
  • degree : 指定压测并发度(压测线程个数)

结果解读

测试报告如下所示:

Summary: SQL01 exec=813469, rows=813469=100/e, avg=4741 us
Summary: exec=6667/s, qtps=6667/s

主要关注:

  • qtps : 当测试SQL为写操作的时候,为TPS,当测试SQL为读操作的时候,表示QPS,若混合读写,则需要根据读写比例计算TPS和QPS。
  • avg : 表示95%平均响应时间,单位为微秒

FAQs

  • 如何提前终止压测,得到测试结果?

有时候并不想压测那么长的时间,那么可以按住ctrl+c退出程序的执行,同时可以得到测试结果

  • ctrl+c无法退出,hange住了该怎么办?

当degree设置得特别大的时候,按ctrl+c退出程序,有可能无法退出,直接hange住,这时候已经不能得到测试结果了,只能够找到对应的进程,强行kill掉

ps aux | grep mydbtest
kill -9 ${pid}

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值