MyCat 学习笔记 第十四篇 . 性能测试(上)

27 篇文章 1 订阅
27 篇文章 0 订阅

前言

普通家用PC发展到如今这个阶段,CPU、内存基本已不是性能瓶颈(要打游戏的一边说),关键在于硬盘。随便 3 、5 年前的电脑换块SSD,照样用起来很舒服。

同样对于应用系统来说,觉得最慢的地方还是在于数据存储,狭义理解起来就是数据库读写的瓶颈。特别是对于一个要保证数据一致性的场景,例如商品库存、车票、电影票,一部分性能问题可以用技术手段解决(缓存、分表分库、内存处理等),另一部分性能问题可以通过业务方案解,当然这些都不是今天要讲的重点。

既然数据库已经成为了系统的瓶颈,那在数据库前再部署一个前置应用——MYCAT,到底会降底多少 TPS 或 QPS,那这篇文章就来抛砖引玉下。

(由于整理环境原因,并不能体现MYCAT或MYSQL真实的数据访问情况,本文更多的是在描述MYCAT性能测试的方案。)

环境说明

192.168.31.206 真机 i5 2.5G+16G+SSD 客户端
192.168.31.187 vm centos 7 单核 4G galera cluster 数据库访问入口
192.168.31.212 vm centos 7 单核 4G galera cluster
192.168.31.150 vm centos 7 单核 4G galera cluster mycat server

具体环境搭建参考之前的blog — MyCat 学习笔记 第五篇 . Mycat 1.5 集成 Galera Cluster 10.1.10 读写分离 Centos 7

测试工具

nmon for linux 在 centos6 下的使用

Performance Co-Pilot(支持windows)

mycat 1.5 测试工具
Mycat-server-1.5-GA-20160217103036-testtool.tar.gz

验证<1> 集群环境下千万条记录INSERT

sechema.xml

<mycat:schema xmlns:mycat="http://org.opencloudb/">

    <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">

        <!-- 先只处理单表记录,不做任何的分表行为 -->*

        <table name="t_new_table" dataNode="dn1" />
    </schema>

    <dataNode name="dn1" dataHost="vm_cluster" database="sync_test" />

    <dataHost name="vm_cluster" maxCon="1000" minCon="10" balance="0"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>show status like 'wsrep%'</heartbeat>

        <writeHost host="host_187" url="192.168.31.187:13306" user="root" password="root123" />
        <writeHost host="host_212" url="192.168.31.212:13306" user="root" password="root123" />
        <!--  <writeHost host="host_150" url="192.168.31.150:13306" user="root" password="root123" /> -->
    </dataHost>

</mycat:schema>

使用自建数据表形式进行大数量 insert
sql 操作文件 first.sql,文本形式保存。

total=10000000
sql=insert into  t_new_table (num_data,context) values('${int(15-1015)}','${char([a-f,0-9]8:45)}')

参数说明

Int:数字,${int(..)} 可以是,${int(10-999)}或者,${int(10,999)}前者表示从10999的值,后者表示10或者999 
Date:日期,如${date(yyyyMMddHHmmssSSS-[2014-2015]y)}表示从20142015年的时间,前面是输出格式,符合Java标准 
Char:字符串,${char([0-9]2:2)}表示从09的字符,长度为2位(2:2),}${char([a-f,0-9]8:8)}表示从a到f以及09的字符串随机组成,定常为8位。 
Enmu:枚举,表示从指定范围内获取一个值,${enum(0000,0001,0002)},里面可以是任意字符串或数字等内容。 

testtool 包下面有一套串的 bat 和 sh 脚本,这个场景中先用以下这句命令

./test_stand_insert_perf.sh jdbc:mysql://192.168.31.150:8066/TESTDB test test  50  "file=/Users/houkai/Desktop/first.sql"

参数说明

[jdbcurl] [user] [password]  [threadpoolsize]  [recordrange]:
Jdbcurl:连接mycat的地址,格式为jdbc:mysql://localhost:8066/TESTDB  
User 连接Mycat的用户名 
Password:密码 
Threadpoolsize:并发线程请求,可以在50-200左右调整,看看哪种情况下的性能最好 
(自定义文件测试时使用)
file,即 first.sql对应的文件路径

(默认测试表时使用)
Recordrang:插入的分片系列以及对应的ID范围,
minId-maxId然后逗号分开,对应多组分片的ID范围,如 0-200000,200001-400000,400001-600000,跟分片配置保持一致。

一来本机配置不高,二来还开了3个虚拟机,1千万的记录运行了近1个小时,总体时间上来说还是很慢的。
不过看TPS却是很高,虚拟机环境基本没有网络开销。

check JAVA_HOME & java
---------set HOME_DIR------------
create jobs ...
total record 10000000 batch size:100 autocomit false
success ful created connections ,total :50
create jobs finished ,begin run test...
success create job count: 50 teset threads: 50
27 10:44:35 finished records :0 failed:0 speed:0.0
27 10:44:37 finished records :0 failed:0 speed:0.0
27 10:44:38 finished records :0 failed:0 speed:0.0
27 10:44:39 finished records :0 failed:0 speed:0.0
27 10:44:40 finished records :0 failed:0 speed:0.0
27 10:44:41 finished records :0 failed:0 speed:0.0
27 10:44:42 finished records :0 failed:0 speed:0.0
27 10:44:43 finished records :0 failed:0 speed:0.0
27 10:44:44 finished records :2800 failed:0 speed:342.8851334802841
27 10:44:45 finished records :4500 failed:0 speed:490.78416403097395
。。。。
27 11:43:58 finished records :9994400 failed:0 speed:2805.062157117048
27 11:43:59 finished records :9996100 failed:0 speed:2804.750519712603
27 11:44:00 finished records :9997900 failed:0 speed:2804.4647480472618
27 11:44:01 finished records :9999300 failed:0 speed:2804.068539597762
finishend:10000000 failed:0
used time total:3566seconds
tps:2804.183842292701

再来看下三台虚机在运行过程中服务器的开销
192.168.31.150 集群数据库 & MYCAT服务器
摘要

IO

NET

192.168.31.187 集群数据库 & 数据入口
summary

io

net

192.168.31.212 集群数据库
summary

io

net

小结
1)三台服务器在同一数据库集群体系下,磁盘读写基本相同,都写入数据。
2)但三台服务器角色不同,导至在网络读写上有较大的差异,187 写入服务器集中在网络写出,212集中在数据同步,150由于即是集群环境又是mycat服务器读写比基本为2/1

验证<2> 集群环境下千万条记录INSERT 直联MYSQL

使用相同的脚本,直接访问mysql数据,整体耗时有一定的下降,一方面是跳开了mycat服务,另一方面是mycat server 不和 mysql cluster 竞争IO。

---------set HOME_DIR------------
create jobs ...
total record 10000000 batch size:100 autocomit false
success ful created connections ,total :50
create jobs finished ,begin run test...
success create job count: 50 teset threads: 50
27 14:28:21 finished records :0 failed:0 speed:0.0
27 14:28:22 finished records :0 failed:0 speed:0.0
27 14:28:23 finished records :4200 failed:0 speed:1977.4011299435028
27 14:28:24 finished records :5000 failed:0 speed:1598.4654731457802
27 14:28:25 finished records :8100 failed:0 speed:1960.7843137254902
27 14:28:26 finished records :12800 failed:0 speed:2493.182703544994
27 14:28:27 finished records :15400 failed:0 speed:2509.7783572359845
27 14:28:28 finished records :19600 failed:0 speed:2745.4825605827145
27 14:28:29 finished records :23200 failed:0 speed:2849.4227462539916
27 14:28:30 finished records :26700 failed:0 speed:2919.94750656168
27 14:28:31 finished records :30500 failed:0 speed:3005.518328734726
27 14:28:32 finished records :34300 failed:0 speed:3076.2331838565024
27 14:28:34 finished records :38200 failed:0 speed:3143.2568090183495
27 14:28:35 finished records :41500 failed:0 speed:3153.7350862527546
。。。
27 15:06:30 finished records :9946500 failed:0 speed:4345.875121574399
27 15:06:31 finished records :9950800 failed:0 speed:4345.8436984654945
27 15:06:32 finished records :9955000 failed:0 speed:4345.7743401560465
27 15:06:33 finished records :9960000 failed:0 speed:4346.044641209143
27 15:06:34 finished records :9964800 failed:0 speed:4346.231264270557
27 15:06:35 finished records :9968900 failed:0 speed:4346.108757132961
27 15:06:36 finished records :9974000 failed:0 speed:4346.422132849565
27 15:06:37 finished records :9978800 failed:0 speed:4346.606451522976
27 15:06:38 finished records :9983400 failed:0 speed:4346.695959863792
27 15:06:39 finished records :9988300 failed:0 speed:4346.927300390289
27 15:06:40 finished records :9992800 failed:0 speed:4346.9787610188305
27 15:06:41 finished records :9997500 failed:0 speed:4347.128481942295
finishend:10000000 failed:0
used time total:2300seconds
tps:4347.637059258293

192.168.31.187 集群数据库 & 数据入口
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

192.168.31.150 集群数据库

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

192.168.31.212 集群数据库

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

本篇完

下篇验证下非集群环境下的mycat性能

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值