单机Mycat 性能测试

测试环境

硬件

一台服务器 Cpu 核心数 ： 4 内存 ：6G 虚拟机

测试程序 数据库 mycat 都在上面

系统 ：windows 2012

软件 ： mysql 5.6 jre 1.7 64位 apache

Mycat 测试一

Mycat 版本 2013.12.30

没有做任何优化 直接开跑

测试 并发 100 插入数据 100万 tps 4219 耗时237秒

测试 并发 500 插入数据 100 万 tps 400 成功导入 6.8万数据 之后步入死亡,log 日志中显示内存不足。

Mycat 测试二

首页 mysql max_connections = 2000

修改 wrapper.php 中 MaxDirectMemorySize = 5G

修改schema.xml dataHost 总 maxCon =2000 min=500

插入 数据 Cpu 80+ 内存 80+

测试 500 并发 插入数据 100 万 tps 6800+ 耗时 125m秒

测试 500 并发 插入数据 600万 tps 7326 耗时 819

测试 1000 并发 插入数据 100万 tps 6800+ 耗时 125m秒

测试 1000 并发 插入数据 600万 tps 6800+ 耗时 830秒

Mycat 测试三

mysql max_connections = 2000

修改 wrapper.php 中 MaxDirectMemorySize = 3G

修改schema.xml dataHost 总 maxCon =2000 min=1000

修改分片设置每个分片200万数据 共50个分片

插入数据

并发 1000 插入数据 一亿 成功插入 9938万 tps 4900+

cpu 90+ 内存 90+

查询单条数据

并发100 每个线程执行 1万次查询 查询max(id) == 9900+万

Cpu 25+ 内存 80+ tps 8200+

并发 1000 每个线程执行 1万次查询 查询max(id) == 9900+万

Cpu 70+ 内存80+ tps 7800+

Mysql cpu 60+

Select * from table where id= 990000000;

聚合查询

select sum(fee) total_fee, days,count(id),max(fee),min(fee) from	travelrecord group by days order by days desc limit ？

并发100 此测试执行分片库上的聚合、排序、分页的性能 limit 100 数据量 9900+万

Cpu 98+ 内存 90+

无返回结果

并发 10 limit 100

Cpu 98+ 内存 90+

无返回结果

并发 1 limit 100

依然没有返回结果

统计对 mysql 压力太大 出不来结果 目前没有环境 把mysql 放到单独物理机上测试

退一步进行测试

select max(id) from travelrecord ;

EXPLAIN select id from travelrecord where id = 6000001;

EXPLAIN SELECT COUNT(*) FROM travelrecord WHERE id < 5000000;

EXPLAIN SELECT COUNT(*) FROM travelrecord WHERE id > 98000001;

SELECT COUNT(*) FROM travelrecord WHERE id > 98000001;

SELECT * FROM travelrecord ORDER BY id DESC limit 100 ;

图中

查询 9900+万 单条数据和limit 几乎跟 单表 400万数据的效率相差无几

很不错 。

不过有一个小Bug 在查询大于 或者小于的时候数据正常是分布在多个分片中 但是这里只会查询一个分片。

修改

并发10 共修改 1万数据

耗时 20 秒 tps 454

并发 1000 共修改 10万条数据

耗时 15秒 tps 6666

并发 1000 共修改100万数据

耗时 144 秒 tps 6944

全局表插入

何为全局表比如这个表分了n个分片就是每次插入 修改 删除 同时操作这10个分片,在查询的时候均衡分布到这个n个分片

10个分片 100并发 插入 100万数据

Cpu 60+ 内存 80+

执行时间 1457 秒 tps 686

敢不敢 在霸气点 10个分片 1000并发 插入 100万数据

Cpu 50+ 内存 80+

直接死翘翘

因为这个相当于要同时获取 1000*10= 1万个MYSQL物理连接

Mycat 测试四

配置同测试三 分片数量从50更换为 20个分片每个分片500万数据

插入数据

并发 1000 插入数据 1亿 耗时三小时

Cpu 75+ mysql 40+ mycat 30+ 内存 80+ tps 4000+

查询单条数据

并发100 每个线程执行 1万次查询 查询max(id) == 9900+万

Cpu 25+ 内存 80+ tps 920+

并发 1000 每个线程执行 1万次查询 查询max(id) == 9900+万

Cpu 70+ 内存80+ tps 900+ Mysql cpu 60+ mycat 10+

修改数据

并发 1000 修改数据 100万次

cpu 50+ 内存 80+ tps 6600+

-------------------------------------------------------------------------------

插入数据 x 为 tps