测试环境采用虚拟机的方式进行,虚拟机的配置如下:
主库:
CPU:Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz,逻辑核心8个
内存:32GB
硬盘:250G
从库:
CPU:Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz,逻辑核心8个
内存:32GB
硬盘:250G
MyCAT服务器:
CPU:Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz,逻辑核心4个
内存:8GB
硬盘:250G
测试方法最终以Sysbench为准,测试项目分为MySQL单库与MyCAT集群,集群中已经使用范围分区策略对所有测试用表进行了分区,并且进行了读写分离,写操作只在主库,读操作只在从库。
具体测试项目及结果如下表
|
单库 |
MyCAT |
单库 |
MyCAT |
单库 |
MyCAT |
线程 |
64 |
64 |
128 |
128 |
256 |
256 |
5x1000W |
ü |
ü |
ü |
ü |
ü |
ü |
5x5000W |
ü |
ü |
ü |
ü |
ü |
ü |
对勾为测试通过,叉号为测试不通过,是否通过以最终响应时间为标准,平均响应时间超过500ms则认为测试不通过。按照并发线程数依次列出测试结果。512线程并发由于MyCAT服务器性能成为瓶颈,放弃对比测试。
测试结果预期:
由于MyCAT-MySQL集群本身的功能还没有全部实现,因此测试用脚本采用一些特殊处理,具体内容见附录-测试内容备注。
由于使用了严格的读写分离,和单库相比较,使用一主一从的结构本质上并不能提供太多的性能上的提升,因为从库完整的重演了主库的写操作,并且承担所有的读操作。
而且添加MyCAT作为中间件来完成集群的搭建使得执行SQL需要多经过一个route过程,因此预期MyCAT集群的响应时间和QPS都应当低于单库指标,理想结果为与单库的差距不超过10%。
总体延时对比(ms)
总体QPS对比
5x1000W数据量对比,左侧为响应时间,右侧为QPS
5x5000W数据量对比,左侧为响应时间,右侧为QPS
测试结果总结:
从5x1000W组的测试数据可以看到添加MyCAT作为中间件,明显的提高了响应时间,QPS也有所降低,当数据量增大以后,在5x5000W组的测试结果中,MyCAT表现出了对单库的性能上的提升,同时响应时间也有最多达10%以上的降低,需要注意的是,当采用256线程并发时,MyCAT服务器已经出现了较高的线程切换等待,所以MyCAT在高并发下的表现应该还有提升的空间。
由于没有join操作,瓶颈集中在磁盘IO。
测试结果超过预期,可以预见在数据量较高,且并发压力较大的情况下,MyCAT集群(主->多从)会有更好的表现。
测试内容备注:
测试脚本中,读操作包括:单行数据查询;使用between进行范围查询,且范围查询没有跨数据分片;使用between进行范围查询,包含排序操作order by,且范围查询没有跨数据分片。写操作包括:单行数据的insert………on duplicate update…….和单行数据的删除操作delete…..where……。
测试脚本中不包含join。