Amoeba for MySQL学习研究之性能测试

更新时间:2023-05-29 17:19:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

本文简要介绍了Amoeba for MySQL性能测试的目的、测试环境、测试步骤、测试结果及结论分析,并进行了简单总结!

Amoeba for MySQL学习研究之性能测试

测试目的

本次测试的目的是为了了解确认Amoeba在使用过程中的性能表现情况。

测试环境

服务器环境

注:本次测试由于条件所限,将Amoeba和MySQL

安装在了同一台服务器上,实际应用中应安装在不同服务器上,以提高性能。

数据库环境

分别在server1和server2上建立数据库AmoebaTest,然后在该数据库上建立表tb_Shop。 CREATE TABLE `tb_Shop` (

`Shop_ID` int(11) NOT NULL AUTO_INCREMENT, `City_ID` int(4) DEFAULT NULL,

`ShopName` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `Address` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `ShopStatus` int(2) NOT NULL DEFAULT '1', `CreateTime` datetime NOT NULL,

本文简要介绍了Amoeba for MySQL性能测试的目的、测试环境、测试步骤、测试结果及结论分析,并进行了简单总结!

PRIMARY KEY (`Shop_ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

该数据表比较典型,包括常用的整数型、字符串、时间型、短整型等数据,其测试结果比较有代表性。

测试步骤

测试仅针对两种情况,单机代理模式和双机奇偶切分模式。

单机代理模式是Amoeba仅仅用作MySQL的代理服务器,将接收到的SQL语句转发到MySQL数据库服务器上进行执行。一般情况下,实际应用环境中是不需要使用这种模式的。

双机奇偶切分模式是Amoeba用于代理两台MySQL服务器,同时根据指定的奇偶切分规则将数据切分到两台数据库服务器上。本次使用城市ID进行奇偶切分,切分规则如下:

<tableRule name="tb_Shop" schema="AmoebaTest" defaultPools="server1,server2">

<rule name="rule1" group="CityRule" ruleResult="BOOLEAN"> <parameters>City_ID</parameters>

<expression><![CDATA[ City_ID % 2 = 0 ]]></expression> <defaultPools>server1</defaultPools> <readPools>server1</readPools> <writePools>server1</writePools> </rule>

<rule name="rule2" group="CityRule" ruleResult="BOOLEAN"> <parameters>City_ID</parameters>

<expression><![CDATA[ City_ID % 2 = 1 ]]></expression> <defaultPools>server2</defaultPools> <writePools>server2</writePools> <readPools>server2</readPools> </rule>

</tableRule>

本次测试使用Amoeba自带的benchmark进行测试,分别在连接数为50到500的区间范围内测试使用Amoeba和不使用Amoeba情况下的插入、更新、查询、删除操作的性能表现。

单机代理模式下benchmark的语句如下: 不使用Amoeba: ./benchmark -P 3306 -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 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

双机奇偶切分模式下benchmark的语句如下:

本文简要介绍了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在高负载的情况下能在一定程度上提升数据库的性能,同时可以顺利完成数据的切分工作。当然,本次测试的结果仅限于使用比较简单的切分规则,对于复杂的切分规则,得出的结论可能会不同。另外,本次测试使用的环境是虚拟服务器和办公内网,受到其他因素影响的可能性较大,测试结果仅供参考。

本文来源:https://www.bwwdw.com/article/1ig4.html

Top