< orczhou.com

云数据库RDS MySQL的性能测试

在不同的云厂商,购买相同规格的MySQL实例(如4vCPU-16GB),获得的性能相同吗?该专题系列,通过对不同云厂商的同样规格进行测试,尝试回答该问题(En:Performance Benchmark MySQL on Cloud )。

2024年09月 云数据库RDS MySQL性能测试趋势图

threads/qpsaliyuntencenthuaweibaiduawsazuregoogleoracle
47102559225572206163920257233551
897029936467441013313365413415936
161466016141822972986427654825028054
3222155223361352012022121571036348578317
4827905247701784916448165161197367458130
6432704264952011418187181181276180717838
9636846290772088321007207821330096758504
128396972991820128210292244613388106208198
192389993061020521220912259013478115078043
256383563105221187216652232312985118727907
384396793122421729211672190212904121318209
512403333180522647216272159112930121068386
have_sslDISABLEDDISABLEDDISABLEDDISABLEDYESYESYESYES
innodb_buffer_pool_size9.75GB12GB9GB12GB11GB12GB11GB17GB
innodb_doublewriteONONONONOFFOFFONON
innodb_flush_log_at_trx_commit11111111
innodb_flush_methodO_DIRECTO_DIRECTO_DIRECTfsyncO_DIRECTfsyncO_DIRECTO_DIRECT
innodb_io_capacity200002000012000200020020050001250
innodb_read_io_threads44484NA42
innodb_write_io_threads44484NA44
log_binONONONONOFFONONON
performance_schemaOFFOFFOFFOFFOFFONONON
rpl_semi_sync_master_enabledONONONONNANANANA
rpl_semi_sync_master_timeout1000100001000010000NANANANA
sync_binlog11110001111
thread_pool_size84NANANA4NA16
version8.0.368.0.30-txsql8.0.28-2310038.0.32-2.0.0.28.0.358.0.37-azure8.0.31-google8.0.39-cloud
cpu_capacity80.493.3163.673.9110.956.349.9114.7

2024年05月 云数据库RDS MySQL性能测试趋势图

测试概述

关于测试更多详细说明:云数据库MySQL性能测试@2024年05月

如何重现该测试

测试中如何选择各个云厂商的“标准4c16g”实例:参考该文章中各个云厂商小结的说明

性能表现的部分原因分析可以参考:《云数据库(RDS MySQL)性能深度测评与对比

threads/qpsAliyun_HZAWSAzureBaiduGCPHuaweiOracleTencent
446493607171621571428262337735783
8750968213050404125514770555710157
1610951124705579704146868694840316557
321358618022935211816804214192816622970
48153122109212148160491001717621800926083
64158312254013516185541083719927790127886
96165652493714672203781162220555809230337
128169962521415210201351211220151808931355
192173872529615498209151202720648786532323
256175012539015419210981240321796785132582
384174942531315487211311236122957780432803
512181202497515582212041237923177795832962

关于该测试

一直都在非常深度调研、关注和使用云数据库,其中性能是关注的重点之一。一方面性能是最终成本的重要影响因素,更好的性能,通常意味着使用更少的资源支撑更高的业务量,从而降低整体成本。另外,性能还意味着在极端场景下,数据库的上限支撑能力。所以,一直以来都会持续的对RDS MySQL的不同厂商、规格进行性能测试,在此汇总相关数据,供开发者和企业在云数据库选型时的参考。

其他实用结论(TL;DR)

先说些一些基于测试的实用结论吧,可以让更多的开发者参考:

  1. 不同的云厂商,有着不同的存储架构,不同的安全性/性能考虑,不同的CPU类型/多寡等,看似相同的规格,性能却有着巨大的差异
  2. 在阿里云上,强烈建议考虑使用经济版(ARM)替换标准版(x86),很容易获得超30%的性价比(参考
  3. 总是建议使用最新一代CPU实例,通常都可以获得15%的性价比提升,例如AWS m6i vs m5i,m7g vs m6g(参考
  4. 几大云厂商的”企业级”实例的性能有着显著差异,主要原因是主从复制架构、CPU代差、存储架构等不同导致(参考
  5. 国内云厂商都提供了“通用型”实例,以非常小的资源共享换取了非常大的性价比提升,非常适合非关键场景使用(参考

整体上,在不同的平台上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的场景中,这个性能下降通常都是可以接受

开启传输加密时,对性能的影响约为2%~8%,不同的环境不同的数据库版本会有一些不同。在实际的生产环境中,建议默认打开该功能,应用连接是否需要开启,可以根据实际场景决定。通常,如果Client端和数据库服务器不再同一个网络环境中,则建议Client端启用加密传输。

阿里云RDS MySQL开启/关闭TLS的性能测试

如下是本人在2024年1月的ACMUG(中国MySQL用户组)大会上的分享内容,较为详细对之前的云数据库 RDS MySQL性能测试做了分享。如下为分享的PDF,供参考:

参考链接

重现该测试包含了两个方面,一个是测试工具与主要参数,另一个是测试实例的选择。

该测试选择了模型简单、易于重现的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因为其易用使用,可定制性高被业绩广泛使用,包括AWSGoogle 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

Your email address will not be published. Required fields are marked *