本文简要介绍了Amoeba for MySQL性能测试的目的、测试环境、测试步骤、测试结果及结论分析,并进行了简单总结!
不使用Amoeba: ./benchmark -P 3306 -c 25/50/75/100/125/150/175/200/225/250 -f ../benchmark/InsertQuery.xml/UpdateQuery.xml/SelectQuery.xml/DeleteQuery.xml -h server1 /server2 -n 10000 -u root -p MySQLPassword
使用Amoeba: ./benchmark -P 8066 -c 50/100/150/200/250/300/350/400/450/500 -f ../benchmark/InsertQuery.xml/UpdateQuery.xml/SelectQuery.xml/DeleteQuery.xml -h server1 -n 10000 -u root -p AmoebaPassword
其使用的4个测试文件中的语句如下: InsertQuery.xml:
INSERT INTO AmoebaTest.tb_Shop(City_ID,ShopName,Address,ShopStatus,CreateTime) VALUES (,'这是用来测试的店铺的名称','地址,是一串字符,内含国家、省份、城市或乡村、街道、门牌号码、屋邨、大厦等建筑物名称,或者再加楼层数目、房间编号等。',${@Math@abs(#random.nextInt(10))},NOW()) UpdateQuery.xml
update AmoebaTest.tb_Shop set ShopName='修改后的店铺名称',Address='修改后的店铺详细地址信息',ShopStatus=${@Math@abs(#random.nextInt(10))} where id>=${@Math@abs(#random.nextInt(1000000))} AND id<=${@Math@abs(#random.nextInt(1000000))} SelectQuery.xml
select * from AmoebaTest.tb_Shop where id>=${@Math@abs(#random.nextInt(1000000))} AND id<=${@Math@abs(#random.nextInt(1000000))} limit
${@Math@abs(#random.nextInt(1000))},${@Math@abs(#random.nextInt(1000))} DeleteQuery.xml
delete AmoebaTest.tb_Shop where id>=${@Math@abs(#random.nextInt(1000000))} AND id<=${@Math@abs(#random.nextInt(1000000))}
测试结果
单机纯代理模式
本文简要介绍了Amoeba for MySQL性能测试的目的、测试环境、测试步骤、测试结果及结论分析,并进行了简单总结!
单机更新操作性能对比800 处理能力 TPS 600 400 未用Amoeba 200 0 50 100 150 200 250 300 350 400 450 500 使用Amoeba
连接数
单机查询操作性能对比2500 处理能力 TPS 2000 1500 1000 500 0 50 100 150 200 250 300 350 400 450 500 未用Amoeba 使用Amoeba
连接数
单机删除操作性能对比2500 处理能力 TPS 2000 1500 1000 500 0 50 100 150 200 250 300 350 400 450 500 未用Amoeba 使用Amoeba
连接数
本文简要介绍了Amoeba for MySQL性能测试的目的、测试环境、测试步骤、测试结果及结论分析,并进行了简单总结!
双机奇偶切分模式
本文简要介绍了Amoeba for MySQL性能测试的目的、测试环境、测试步骤、测试结果及结论分析,并进行了简单总结!
双机切分查询操作性能对比2000 处理能力 TPS 1500 1000 未用Amoeba 500 0 50 100 150 200 250 300 350 400 450 500 使用Amoeba
连接数
双机切分删除操作性能对比3000 2500 处理能力 TPS 2000 1500 1000 500 0 50 100 150 200 250 300 350 400 450 500 未用Amoeba 使用Amoeba
连接数
双机切分使用Amoeba 前后的性能比500 400 使用前后的性能比 300 200 100 0 -100 50 100 150 200 250 300 350 400 450 500 连接数 插入 更新 查询 删除
本文简要介绍了Amoeba for MySQL性能测试的目的、测试环境、测试步骤、测试结果及结论分析,并进行了简单总结!
结论和分析
结论1:
MySQL本身的性能会随着负载(并发连接数)的增大而急剧下降:当负载比较大时,MySQL响应连接请求的时间比较长,这直接导致了MySQL处理能力的下降。 结论2:
Amoeba在负载较小时会造成数据库性能的下降:因为Amoeba需要解析和转发请求的SQL,这期间会造成一定的性能损耗。从测试结果来看,在单机纯代理模式下,最大会造成20%左右的性能损耗;而在双机切分模式下,最大会造成70%左右的性能损耗。 结论3:
Amoeba在负载较大时会显著提升数据库的性能:在负载较大时,MySQL本身的响应会变慢,接受连接会消耗非常多的资源;但是通过Amoeba进行连接后,连接请求实际上只连接在了Amoeba服务上,而Amoeba服务与MySQL服务器之间存在的连接池,使得MySQL本身的连接数较小,从而响应较快。从测试结果来看,在单机代理模式下,平均可达到约500%的性能提升;而在双机切分模式下,平均的性能提升约为50%。根据本次测试环境的情况来看,单机模式下性能损耗和提升的分水岭为并发连接数150左右,而双机切分模式下,这一数值约为200左右。
总结
本次测试确认Amoeba for MySQL在高负载的情况下能在一定程度上提升数据库的性能,同时可以顺利完成数据的切分工作。当然,本次测试的结果仅限于使用比较简单的切分规则,对于复杂的切分规则,得出的结论可能会不同。另外,本次测试使用的环境是虚拟服务器和办公内网,受到其他因素影响的可能性较大,测试结果仅供参考。