Mycat性能压力测试

18 篇文章 0 订阅
7 篇文章 0 订阅

一、前期准备

1.1 压测工具准备

二、压测工具及中间件服务器准备

2.1 压测工具服务器

测试工具系统内存CPUIP地址备注
JMeterWindows4G4localhost本机安装
SysbenchCentOS4G4192.168.61.41虚拟机安装

2.2 Mycat中间件

中间工具系统内存CPUIP地址备注
MycatCentOS4G4192.168.61.59本机安装

三、MySQL测试集群

3.1 MySQL测试集群统计

序号集群类型服务器类型CPU内存硬盘IP地址备注
1单库CentOS4核4G20G192.168.61.63
2单库分表CentOS4核4G20G192.168.61.65水平分表
3单库多表CentOS4核4G20G192.168.61.63
4主从多表CentOS4核4G20G192.168.61.61
192.168.61.62
读写分离
5多库分表CentOS4核4G20G192.168.61.16
192.168.61.17
192.168.61.18
多库水平分表

四、方案配置及压测结果

4.1 单库MySQL

4.1.1 Sysbench测试
4.1.1.1 方案配置

方案参考:https://blog.csdn.net/weixin_41668084/article/details/113407790

4.1.1.2 测试结果

TPS:1001.92 per/sec

QPS:20038.46 per/sec

20210129173727.png
4.1.2 JMeter测试
4.1.2.1 方案配置

方案参考:https://blog.csdn.net/weixin_41668084/article/details/113409902

4.1.2.1 测试结果

write:14323.77 per/sec

20210131224659

4.2 单库分表

4.2.1 Mycat配置

方案参考:https://blog.csdn.net/weixin_41668084/article/details/112238666

4.2.2 JMeter配置
4.2.2.1 数据写入
  1. 配置文件:https://gitee.com/gbc_sxy/imagebed/raw/master/img/20210131225725.jmx

  2. 测试命令

    .\jmeter.bat -n -t .\test-demo\单裤\Mycat压测线程组-插入.jmx -l .\result\t_user\insert.jtl -e -o .\result\insert
    
  3. 测试结果

    image-20210131230145892
4.2.2.2 数据更新
  1. 配置文件:https://gitee.com/gbc_sxy/imagebed/raw/master/img/20210131231211.jmx

  2. 测试命令

    .\jmeter.bat -n -t .\test-demo\单裤\Mycat压测线程组-更新.jmx -l .\result\t_user\insert.jtl -e -o .\result\update
    
  3. 测试结果

    image-20210131230950527
4.2.2.3 数据查询
  1. 配置文件:https://gitee.com/gbc_sxy/imagebed/raw/master/img/20210131231323.jmx

  2. 测试命令

    .\jmeter.bat -n -t .\test-demo\单裤\Mycat压测线程组-查询.jmx -l .\result\t_user\insert.jtl -e -o .\result\read
    
  3. 测试结果

    image-20210131231431566

4.3 单库多表

4.3.1 Mycat配置

参考连接:https://blog.csdn.net/weixin_41668084/article/details/112797427

schema.xml配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<!-- name: 逻辑数据库名 -->
	<schema name="testdb" checkSQLschema="false" sqlMaxLimit="100">
		<!-- name: 表名,分表主键,子表,数据节点,分表规则 -->
		<table name="t_user" primaryKey="id" autoIncrement="true" subTables="t_user_$1-3" dataNode="dn1" rule="mod-long"/>
	<table name="t_month" primaryKey="id" autoIncrement="true" subTables="t_month_20201$1-2,t_month_20210$1-2" dataNode="dn1" rule="sharding-by-year"/>
        </schema>
	<!-- database:物理数据库名 -->
	<dataNode name="dn1" dataHost="localhost1" database="mytest"/>
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="192.168.61.63:3306" user="root" password="root">
			<!-- can have multi read hosts -->
			<readHost host="hostS1" url="192.168.61.63:3306" user="root" password="root"/>
		</writeHost>
	</dataHost>
</mycat:schema>
4.3.2 Sysbench配置

参考链接:https://blog.csdn.net/weixin_41668084/article/details/113407790

4.3.3 测试结果
  1. 直接测试MySQL

    image-20210131233703905
  2. 通过Mycat中间件连接

    image-20210131233736164

测试结论:mycat中间件连接数据库会有性能损耗。

4.4 主从复制

MySQL主从复制集群,可通过mycat实现读写分离。

4.4.1 Mycat配置

参考连接:https://blog.csdn.net/weixin_41668084/article/details/112797427

schema.xml配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
    <dataNode name="dn1" dataHost="host1" database="test" />
    <dataHost name="host1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <!-- can have multi write hosts -->
        <writeHost host="hostM1" url="192.168.61.61:3306" user="root" password="root">
            <!-- can have multi read hosts -->
            <readHost host="hostS1" url="192.168.61.62:3306" user="root" password="root" />
        </writeHost>
    </dataHost>
</mycat:schema>
4.4.2 Sysbench测试
  1. 方案配置

    参考方案:https://blog.csdn.net/weixin_41668084/article/details/113407790

  2. 测试结果

    1. MySQL直连测试

      mysql_1m-2s
    2. Mycat连接测试

      image-20210131235116274

4.5 多库分表

4.5.1 Mycat配置

参考连接:https://blog.csdn.net/weixin_41668084/article/details/112797427

schema.xml配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<schema name="mytest" checkSQLschema="false" sqlMaxLimit="100">
		<!-- auto sharding by id (long) -->
		<!--splitTableNames 启用<table name 属性使用逗号分割配置多个表,即多个表使用这个配置-->
		<table name="t_user" dataNode="dn$1-3" rule="mod-long" splitTableNames="true"/>
	</schema>
	<!--数据节点-->
	<dataNode name="dn1" dataHost="localhost1" database="mycat"/>
	<dataNode name="dn2" dataHost="localhost2" database="mycat"/>
	<dataNode name="dn3" dataHost="localhost3" database="mycat"/>
	<!--节点配置-->
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="192.168.61.16:13306" user="root" password="123456"/>
	</dataHost>
	<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM2" url="192.168.61.17:13306" user="root" password="123456"/>
	</dataHost>
	<dataHost name="localhost3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM3" url="192.168.61.18:13306" user="root" password="123456"/>
	</dataHost>
</mycat:schema>
4.5.2 JMeter测试
4.5.2.1 数据写入
  1. 配置文件:https://gitee.com/gbc_sxy/imagebed/raw/master/img/20210201001213.jmx

  2. 执行命令

    .\jmeter.bat -n -t .\test-demo\分库\Mycat压测线程组-分库-插入.jmx -l .\result\t_user\insert.jtl -e -o .\result\t_user\insert
    
  3. 测试结果

    image-20210201001334637
4.5.2.1 数据更新
  1. 配置文件:https://gitee.com/gbc_sxy/imagebed/raw/master/img/20210201001411.jmx

  2. 执行命令

    .\jmeter.bat -n -t .\test-demo\分库\Mycat压测线程组-分库-更新.jmx -l .\result\t_user\update.jtl -e -o .\result\t_user\update
    
  3. 测试结果

    image-20210201001607656
4.5.2.1 数据读取
  1. 配置文件:https://gitee.com/gbc_sxy/imagebed/raw/master/img/20210201001415.jmx

  2. 执行命令

    .\jmeter.bat -n -t .\test-demo\分库\Mycat压测线程组-分库-读取.jmx -l .\result\t_user\read.jtl -e -o .\result\t_user\read
    
  3. 测试结果

    image-20210201001651879

五、测试结果汇总

5.1 数据汇总

测试原始数据下载

序号MySQL测试案例中间件压测工具Write(t/s)Update(t/s)Read(q/s)TPS (per/sec)QPS(per/sec)备注
1单机mysqlJmeter14323.77添加主键索引
单机mysqlSysbench1001.9220038.46
2单库分表Jmeter45180随机id更新和查询
3单库分表MycatJmeter1530043505400添加主键索引
4单库分表MycatJmeter5152.4613199.58添加主键索引,指定分区
5单库多表Sysbench72214456
6单库多表MycatSysbench55011018
7一主双从多表Sysbench443.218864.3
8一主双从多表MycatSysbench395.097903.73
9多库分表MycatJmeter11689.4820.341.3主键id分库
10多库分表MycatJmeter11567.255210.8311937.45添加主键索引,主键查询

5.2 数据图形化

image-20210201002754503

六、结论

  1. Mycat作为中间件,测试结果表现出有大幅度的性能损失,大约在10%~25%左右(仅供参考)。
  2. 如性能损失可接受,作为中间件Mycat确实可以满足我们生产中徐分库分表的大部分需求环境。
  3. Mycat作为一个开源中间件,实现了读写分离,数据分片,多数据源整合,避免了(Sharding-JDBC)的侵入式编程。
  4. 如果条件允许,建议使用功能更为强大和丰富的分布式开源数据库TIDB
  5. 目前测试版本使用为:1.6.7.4,也可参考测试升级版的分布式关系型数据库Mycat2

以上,仅供参考,如有错误,请指正!


参考链接

  1. mycat实战之性能测试
  2. MyCat性能优化
  3. Mycat 之路 | 性能测试
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值