在不同的云厂商购买相同规格的MySQL实例(如4vCPU-16GB),获得的性能相同吗?
为了回答上面的疑问,于是就开启了我的云数据库性能测试之旅。这是第二次测试(上次测试参考),本次测试结果如下:
云数据库RDS MySQL性能测试趋势图@202405
QPS详细数据:
95%延迟详细数据(单位:ms):
测试模型:oltp_read_write
--time=300
--table_size=10000 --tables=10
--skip_trx=on --db-ps-mode=disable
--rand-type=uniform
并发线程:
4,8,16,32,48,64,96,128,192,256,384,512
测试参考命令:
sysbench oltp_read_write --threads=$conthread --time=$run_time \
--report-interval=3 --percentile=95 --histogram=on --db-driver=mysql \
$sysb_mysql_conn \
--skip_trx=on --db-ps-mode=disable --rand-type=uniform $ssl_param \
--table_size=$table_size --tables=$tables run >> $run_file 2>&1
测试实例规格的选择
这里选取了阿里云、华为云、腾讯云、AWS、Azure、Oracle Cloud、Google Cloud的托管MySQL服务(RDS MySQL)作为测试对象。测试实例实例规格满足如下条件:
4vCPU16GB内存规格,存储100GB
如果需要选择IOPS,选择3000
具备跨可用区的高可用
非常高的数据可靠性级别,同步复制或半同步复制,或者MGR复制,或者存储层的同步复制
具备非常好的性能一致性(独享的计算资源)
具体每个云厂商的标准规格选择,参考本文后续各个云厂商对应小结部分。
相比于第一次测试,这次AWS表现出了非常好的性能(第二名);这是比较意外的,不过再回头看上次测试中,AWS也表现出了很好的扩展性,可能当时最大128线程并发,并没有压测当时的极限性能。也可以看到,Amazon RDS在高并发的时候,表现是非常好的。
华为RDS MySQL是第三名,相比第一次的“遥遥领先”,本次测试结果上被腾讯云、AWS超越。
第四名是百度云RDS,其测试结果与华为云非常接近。另外,百度云的测试结果在北京、广州两个区域做了验证,性能表现较为一致。
第五名是阿里云RDS MySQL;阿里云是国内最为成熟的云厂商,发展历史更长,产品更加丰富,产品可定制化程度也很高。在本次测试中,阿里云杭州地区的性能有所提高(相比于第一次测试),但不同区域性能不一致的情况依旧较为明显。
Azure在本次测试中排名第六,在Azure上,AMD CPU似乎是其主推规格,在下面的详细数据中,可以看到Azure上AMD规格和Intel规格较为接近;Intel性能略高,约高出6%。
第七名是Google Cloud,本次选择了更为常用的“Enterprise”版本(而不是“Enterprise Plus”)作为对比版本;对于Enterprise Plus版本也做了相应的测试,详细的数据可以参考本文小结“谷歌云Cloud SQL for MySQL”。
第八名是Oracle Cloud;这是首次测试Oracle,所以也对MySQL@Oracle Cloud做了比较细致的测试,包括amd/intel规格,OCPU和ECPU规格等。
本次也额外对华为云Kunpeng(ARM)实例进行测试,其性能约为Intel规格的50%~70%;如果需要使用国产架构,则可能要考虑其在性能上的让渡:
其他:选择百度云的时候,也注意到了,目前在百度云上提供的8个区域,很多的区域都只有一个可用区可以选择(例如上海)。这也是云厂商早期发展过程中的阶段,当客户量不是很大的时候,新开区域投入成本会很大,这是一个随着客户量逐渐增长,而区域逐渐丰富的阶段。
Enterprise Plus版本通过使用更新的机型,以及更高效的存储效率,从而提升数据库的性能。关于两个版本差异可以参考:Google Cloud SQL for MySQL的”Enterprise”和”Enterprise Plus”版本。本次对Enterprise和Enterprise Plus版本进行了一个性能对比,Enterprise Plus版本又分为开启data cache与关闭data cache这个场景:
可以看到:
GCP的Cloud SQL for MySQL的Enterprise Plus版本有着较为明显的性能优势,高出Enterprise版本约58%;
在这个测试模型下(数据量较小),data cache是否开启对于性能影响并不大
并发数从2,4,8,16,24,32,48,64,96,128调整为4,8,16,32,48,64,96,128,192,256,384,512
新增了参数--skip_trx=on --db-ps-mode=disable
显式指定参数--rand-type=uniform
性能指更换为QPS(Queries Per Second),而不再是TPS(Transactions Per Second)
关于作者:周振兴/orczhou,NineData联合创始人,Oracle ACE(MySQL),《高性能MySQL》第三、四版译者,曾任阿里云数据库资深专家