在不同的云厂商,购买相同规格的MySQL实例(如4vCPU-16GB),获得的性能相同吗?该专题系列,通过对不同云厂商的同样规格进行测试,尝试回答该问题(En:Performance Benchmark MySQL on Cloud )。
2024年09月 云数据库RDS MySQL性能测试趋势图
threads/qps | aliyun | tencent | huawei | baidu | aws | azure | oracle | |
---|---|---|---|---|---|---|---|---|
4 | 7102 | 5592 | 2557 | 2206 | 1639 | 2025 | 723 | 3551 |
8 | 9702 | 9936 | 4674 | 4101 | 3313 | 3654 | 1341 | 5936 |
16 | 14660 | 16141 | 8229 | 7298 | 6427 | 6548 | 2502 | 8054 |
32 | 22155 | 22336 | 13520 | 12022 | 12157 | 10363 | 4857 | 8317 |
48 | 27905 | 24770 | 17849 | 16448 | 16516 | 11973 | 6745 | 8130 |
64 | 32704 | 26495 | 20114 | 18187 | 18118 | 12761 | 8071 | 7838 |
96 | 36846 | 29077 | 20883 | 21007 | 20782 | 13300 | 9675 | 8504 |
128 | 39697 | 29918 | 20128 | 21029 | 22446 | 13388 | 10620 | 8198 |
192 | 38999 | 30610 | 20521 | 22091 | 22590 | 13478 | 11507 | 8043 |
256 | 38356 | 31052 | 21187 | 21665 | 22323 | 12985 | 11872 | 7907 |
384 | 39679 | 31224 | 21729 | 21167 | 21902 | 12904 | 12131 | 8209 |
512 | 40333 | 31805 | 22647 | 21627 | 21591 | 12930 | 12106 | 8386 |
have_ssl | DISABLED | DISABLED | DISABLED | DISABLED | YES | YES | YES | YES |
innodb_buffer_pool_size | 9.75GB | 12GB | 9GB | 12GB | 11GB | 12GB | 11GB | 17GB |
innodb_doublewrite | ON | ON | ON | ON | OFF | OFF | ON | ON |
innodb_flush_log_at_trx_commit | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
innodb_flush_method | O_DIRECT | O_DIRECT | O_DIRECT | fsync | O_DIRECT | fsync | O_DIRECT | O_DIRECT |
innodb_io_capacity | 20000 | 20000 | 12000 | 2000 | 200 | 200 | 5000 | 1250 |
innodb_read_io_threads | 4 | 4 | 4 | 8 | 4 | NA | 4 | 2 |
innodb_write_io_threads | 4 | 4 | 4 | 8 | 4 | NA | 4 | 4 |
log_bin | ON | ON | ON | ON | OFF | ON | ON | ON |
performance_schema | OFF | OFF | OFF | OFF | OFF | ON | ON | ON |
rpl_semi_sync_master_enabled | ON | ON | ON | ON | NA | NA | NA | NA |
rpl_semi_sync_master_timeout | 1000 | 10000 | 10000 | 10000 | NA | NA | NA | NA |
sync_binlog | 1 | 1 | 1 | 1000 | 1 | 1 | 1 | 1 |
thread_pool_size | 8 | 4 | NA | NA | NA | 4 | NA | 16 |
version | 8.0.36 | 8.0.30-txsql | 8.0.28-231003 | 8.0.32-2.0.0.2 | 8.0.35 | 8.0.37-azure | 8.0.31-google | 8.0.39-cloud |
cpu_capacity | 80.4 | 93.3 | 163.6 | 73.9 | 110.9 | 56.3 | 49.9 | 114.7 |
2024年05月 云数据库RDS MySQL性能测试趋势图
测试概述
关于测试更多详细说明:云数据库MySQL性能测试@2024年05月
测试中如何选择各个云厂商的“标准4c16g”实例:参考该文章中各个云厂商小结的说明
性能表现的部分原因分析可以参考:《云数据库(RDS MySQL)性能深度测评与对比》
threads/qps | Aliyun_HZ | AWS | Azure | Baidu | GCP | Huawei | Oracle | Tencent |
---|---|---|---|---|---|---|---|---|
4 | 4649 | 3607 | 1716 | 2157 | 1428 | 2623 | 3773 | 5783 |
8 | 7509 | 6821 | 3050 | 4041 | 2551 | 4770 | 5557 | 10157 |
16 | 10951 | 12470 | 5579 | 7041 | 4686 | 8694 | 8403 | 16557 |
32 | 13586 | 18022 | 9352 | 11816 | 8042 | 14192 | 8166 | 22970 |
48 | 15312 | 21092 | 12148 | 16049 | 10017 | 17621 | 8009 | 26083 |
64 | 15831 | 22540 | 13516 | 18554 | 10837 | 19927 | 7901 | 27886 |
96 | 16565 | 24937 | 14672 | 20378 | 11622 | 20555 | 8092 | 30337 |
128 | 16996 | 25214 | 15210 | 20135 | 12112 | 20151 | 8089 | 31355 |
192 | 17387 | 25296 | 15498 | 20915 | 12027 | 20648 | 7865 | 32323 |
256 | 17501 | 25390 | 15419 | 21098 | 12403 | 21796 | 7851 | 32582 |
384 | 17494 | 25313 | 15487 | 21131 | 12361 | 22957 | 7804 | 32803 |
512 | 18120 | 24975 | 15582 | 21204 | 12379 | 23177 | 7958 | 32962 |
目录
关于该测试
一直都在非常深度调研、关注和使用云数据库,其中性能是关注的重点之一。一方面性能是最终成本的重要影响因素,更好的性能,通常意味着使用更少的资源支撑更高的业务量,从而降低整体成本。另外,性能还意味着在极端场景下,数据库的上限支撑能力。所以,一直以来都会持续的对RDS MySQL的不同厂商、规格进行性能测试,在此汇总相关数据,供开发者和企业在云数据库选型时的参考。
其他实用结论(TL;DR)
先说些一些基于测试的实用结论吧,可以让更多的开发者参考:
- 不同的云厂商,有着不同的存储架构,不同的安全性/性能考虑,不同的CPU类型/多寡等,看似相同的规格,性能却有着巨大的差异
- 在阿里云上,强烈建议考虑使用经济版(ARM)替换标准版(x86),很容易获得超30%的性价比(参考)
- 总是建议使用最新一代CPU实例,通常都可以获得15%的性价比提升,例如AWS m6i vs m5i,m7g vs m6g(参考)
- 几大云厂商的”企业级”实例的性能有着显著差异,主要原因是主从复制架构、CPU代差、存储架构等不同导致(参考)
- 国内云厂商都提供了“通用型”实例,以非常小的资源共享换取了非常大的性价比提升,非常适合非关键场景使用(参考)
第一次云数据库性能测试
ARM vs x86 @RDS MySQL
整体上,在不同的平台上ARM-based的RDS MySQL有着不同的表现。具体如下:
Graviton vs x86 on AWS
- 在AWS上,Graviton 3实例RDS性能在高并发时,相对x86有较明显的性价比优势,以128并发为例,m7g vs m6i的对比
- Graviton 3 相比Graviton 2有非常明显的性能优势(参考),这与宣称的27%性价比提升是较为一致的
- Graviton 2实例相比x86几乎没有什么优势,与宣称的52%性价比提升结果相悖
ARM vx x86 on 阿里云
- 经济版(ARM)比标准版(x86)性价比要高出32%
- 具体的:选取16并发,ARM版TPS为2185,x86版TPS为2324。价格上, ARM版价格为1.61元/时, x86版价格为2.52元/时,那么对应每1000个TPS的价格分别为:0.74元与1.08元。从性价比的角度来看,经济版提升了31.5%
鲲鹏 vs x86 on 华为云
- x86和鲲鹏架构实例价格是相同的
鲲鹏版本相比x86约有15~45%的性能差距 - 考虑到自研鲲鹏芯片在中国自主可控芯片中的地位,在国内大量无法使用x86的场景中,这个性能下降通常都是可以接受
启用TLS对RDS MySQL的性能影响
开启传输加密时,对性能的影响约为2%~8%,不同的环境不同的数据库版本会有一些不同。在实际的生产环境中,建议默认打开该功能,应用连接是否需要开启,可以根据实际场景决定。通常,如果Client端和数据库服务器不再同一个网络环境中,则建议Client端启用加密传输。
云数据库性能测试@ACMUG
如下是本人在2024年1月的ACMUG(中国MySQL用户组)大会上的分享内容,较为详细对之前的云数据库 RDS MySQL性能测试做了分享。如下为分享的PDF,供参考:
如何重复该测试:Sysbench 参数
重现该测试包含了两个方面,一个是测试工具与主要参数,另一个是测试实例的选择。
该测试选择了模型简单、易于重现的Sysbench(oltp_read_write),其主要参数包括:
- 测试模型: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复制,或者存储层的同步复制
- 具备非常好的性能一致性(独享的计算资源)
具体每个云厂商的标准规格选择,参考:云数据库RDS MySQL性能测试与对比@2024年05月文中对各个云厂商小结部分。
关于Sysbench测试
这里使用常用的、易用重现的Sysbench工具进行测试。主要的模型包括oltp_read_write以及部分自定义模型。Sysbench因为其易用使用,可定制性高被业绩广泛使用,包括AWS、Google Cloud、阿里云、腾讯云等。
sysbench oltp_read_write模型
sysbench的oltp_read_write模型是一个事务压测模型,单个事务中包含了10个点查、4个范围查询(包括了ORDER BY/SUM/DISTINCT等)、影响索引的更新、不影响索引的更新、删除数据、插入数据。关于该测试模型的详细说明可以参考文章:
关于该测试的限制
本节对在测试过程中的一些限制进行补充说明,供参考:
- 在本系列的的测试中,地域选择较为随机,例如阿里云选择了杭州、百度云选择北京、AWS/谷歌云选择了东京、Azure云选择了美东/香港/东京等。这里的一个假设是,各个云厂商在各个区域的RDS MySQL性能应该是相同或者接近的。
- 首先于个人的时间与资源,这里仅对较为常用的4vCPU16GB的规格进行测试,单次并发测试持续时间为300秒。
- 虽然都是用MySQL 8.0版本,但是不同的厂商的数据库小版本也会不同。
- 不同厂商的CPU、磁盘类型、价格等各有不同,所以这不是一个完全对等的测试,也不可能是。
- 不同厂商的RDS实例的默认参数模板也各有不同,甚至同一个厂商在不同阶段的参数也可能会有调整。
- 有的云厂商的磁盘存储有着多种不同的选择,例如阿里云支持ESSD PL1/2/3,AWS也支持gp3/io1类型的存储选择,不同的存储选择也会对应这个不同的性能。
- 关于可用区的选择:在测试中,我尽量会将测试的ECS/EC2/VM等与数据库主节点放在同一个可用区。但依旧有一些情况做不到这一点。例如在这次的测试过程中,GCP在东京地区b可用区,虽然可以创建数据库,但是却没有资源创建VM节点(“A n2-highcpu-8 VM instance is currently unavailable in the asia-northeast1-b zone.”)。
如果有更多建议,可以在本文后留下你的建议,以供后续参考与改进。
Leave a Reply