云数据库RDS MySQL性能测试与对比@2024年09月

在不同的云厂商,购买相同规格的MySQL实例(如4vCPU-16GB),获得的性能相同吗?

dataaliyuntencenthuaweibaiduawsazuregoogleoracle
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

测试结果概述

在本次测试中:阿里云RDS MySQL性能表现最好,极限的QPS达到了4万;其次是腾讯云,达到了3.2万;第二梯队是华为云、百度云和AWS,极限的QPS约2.2万;之后是Azure、Google云,极限QPS约1.2万;最后是Oracle云,极限QPS约8500。详细的数据和趋势图,可以参考以上的图、表,这里不再详述。

“单位CPU计算能力”提供的Sysbench QPS

“单位CPU上的Sysbench QPS”(Sysbench QPS per CPU Capacity Unit),很大程度的展现了各个厂商在该测试模型下,对MySQL内核性能优化的效果如何。

本次测试中,新增了“CPU计算能力指标”,参考上图的“cpu_capacity”数据。“CPU计算能力指标”,表示该实例的CPU,在较高并发(等于或超过CPU核数/超线程)情况下,每秒能够完成多少万次简单的散列计算。例如阿里云的“CPU计算能力指标”是80.4,则表示该CPU平均每秒能够完成80.4万次简单字符串散列计算。

有了这个指标,我们可以对上述的性能指标再进行一次深入的观察。首先,可以观察,每个云厂商,提供的该标准规格下CPU资源具体为多少。这也就是右图中蓝色的柱状图。例如,这里的阿里云RDS MySQL的“CPU计算能力”为80.4,腾讯云为93.3,华为云为163.6。可以看到,各个云厂商对于“相同”(4c16g)的实例,提供了不同的CPU计算能力。而这些计算能力也在各个RDS MySQL的Sysbench QPS中有所表现。

更加深入的,还可以观察到每个云厂商在“单位CPU计算能力”所能够提供的Sysbench QPS。这里,对“单位CPU计算能力”定义是:在MySQL中“一万次简单散列”的计算资源。右图中的红色柱状图,即表示“单位CPU计算能力”所能够提供的Sysbench QPS。

$$
\text{Sysbench QPS per CPU Capacity Unit} = \frac{\text{Sysbench QPS}}{\text{CPU capacity}}
$$

因为该指标不再关注绝对CPU表现下的Sysbench QPS,所以,该指标可以反应各个厂商在该测试模型下,对MySQL内核性能优化的效果如何。

当然,对于开发者选择RDS MySQL来说,有时候只关注绝对Sysbench QPS就可以了。

还需要注意的是,因为各个云厂商的架构、性能参数等各不相同,所以,在做对比的时候,需要考虑这些因素。例如,百度的RDS MySQL的sync_binlog参数是1000,其他厂商都是1;再比如,AWS RDS MySQL使用的存储同步复制,所以默认情况下,Binlog甚至是关闭的(准确的说,应该是与automated backups是否开启有关)。

关于该测试

在汇总文章:云数据库RDS MySQL的性能测试较为详细介绍了该测试,包括了:

以下数据从“纵向”汇总了某一个云厂商之前历次测试的数据,包括不同的区域,时间的测试。

阿里云 RDS MySQL

本次测试了杭州、北京两个地区RDS MySQL,两个地区的实例性能相差明显:4万 vs 3.2万。并且,本次测试性能相比于之前的测试,性能增长明显。从这里的观察来看:

  • CPU计算能力提升明显
  • 默认情况下关闭了performance_schema
  • 开启或优化了thread_pool ,注意到,thread_pool_size参数发生了变化
data202409_hangzhou202409_beijing202405_hangzhou202405_shenzhen202405_beijing
471025166464931013812
897028045750952345629
1614660122111095184617576
322215517946135861149810534
482790522734153121360310968
643270426520158311342711371
963684628843165651510411728
1283969730261169961541611933
1923899929380173871572312268
2563835631131175011596512146
3843967931601174941680512101
5124033332472181201688011937
have_sslDISABLEDDISABLEDDISABLEDDISABLEDDISABLED
innodb_buffer_pool_size9.75GB9.75GB9.75GB9.75GB9.75GB
innodb_doublewriteONONONONON
innodb_flush_log_at_trx_commit11111
innodb_flush_methodO_DIRECTO_DIRECTO_DIRECTO_DIRECTO_DIRECT
innodb_io_capacity2000020000200002000020000
innodb_read_io_threads44444
innodb_write_io_threads44444
log_binONONONONON
performance_schemaOFFOFFONONON
rpl_semi_sync_master_enabledONONONONON
rpl_semi_sync_master_timeout10001000100010001000
sync_binlog11111
thread_pool_size88111
version8.0.368.0.368.0.348.0.348.0.34
cpu_capacity80.474.939.745.333.3

腾讯云 TencentDB for MySQL

本次仅测试了腾讯云北京、独享实例,整体的性能表现依旧非常好。纵向的,与5月份的测试对比,性能较为稳定,没有太大的波动。值得注意的是,相比于之前(202405上海区域),本次测试腾讯云的实例使用了更少的“CPU计算能力”,但依旧获得了与之前测试较为接近的性能表现。

data202405_shanghai_exclusive202405_beijing_universal202405_beijing_exclusive202409_beijing_exclusive
46960540157835592
81179110148101579936
1618661186641655716141
3224731316682297022336
4827420353852608324770
6429471363362788626495
9631167364183033729077
12831506362573135529918
19231747363943232330610
25631708359553258231052
38432574344813280331224
51233472331643296231805
have_sslDISABLEDDISABLEDDISABLEDDISABLED
innodb_buffer_pool_size12GB12GB12GB12GB
innodb_doublewriteONONONON
innodb_flush_log_at_trx_commit1111
innodb_flush_methodO_DIRECTO_DIRECTO_DIRECTO_DIRECT
innodb_io_capacity20000200002000020000
innodb_read_io_threads4444
innodb_write_io_threads4444
log_binONONONON
performance_schemaOFFOFFOFFOFF
rpl_semi_sync_master_enabledONONONON
rpl_semi_sync_master_timeout10000100001000010000
sync_binlog1111
thread_pool_size4444
version8.0.30-txsql8.0.30-txsql8.0.30-txsql8.0.30-txsql
cpu_capacity169.3170.59293.3

华为云 RDS MySQL

本次测试华为云表现稳定,与之前的测试表现非常接近:性能数据接近,版本几乎相同(build号从“8.0.28-231002”升为了“8.0.28-231003”),所提供的CPU计算能力也几乎相同。注意到,华为云RDS MySQL一直是所有云厂商,所提供的计算能力最高的厂商。似乎,是这样,别的云厂商的的4c16g通常是,4个超线程,而华为云似乎真的是提供了4个核(cores)。

data202405_beijing_x86202409_beijing_x86202405_beijing_arm
4262325571895
8477046743439
16869482296186
3214192135209432
48176211784911174
64199272011412527
96205552088312980
128201512012813029
192206482052113345
256217962118714212
384229572172915056
512231772264715172
have_sslDISABLEDDISABLEDDISABLED
innodb_buffer_pool_size9GB9GB9GB
innodb_doublewriteONONON
innodb_flush_log_at_trx_commit111
innodb_flush_methodO_DIRECTO_DIRECTO_DIRECT
innodb_io_capacity120001200012000
innodb_read_io_threads444
innodb_write_io_threads444
log_binONONON
performance_schemaOFFOFFOFF
rpl_semi_sync_master_enabledONONON
rpl_semi_sync_master_timeout100001000010000
sync_binlog111
version8.0.28-2310028.0.28-2310038.0.28-231002
cpu_capacity167.6163.689.5

百度云 RDS MySQL

百度云RDS提供非常稳定的性能。如下图数据所示,四次测试,整体的性能表现非常稳定,地域差异也比较小。

data202409_beijing202405_beijing202405_beijing_extra202405_guangzhou
42206215721782712
84101404140514837
167298704172928246
3212022118161199012785
4816448160491624316047
6418187185541788818618
9621007203782038719355
12821029201352091519797
19222091209152055619858
25621665210982120019406
38421167211312112520157
51221627212042073719542
have_sslDISABLEDDISABLEDDISABLEDDISABLED
innodb_buffer_pool_size12GB12GB12GB12GB
innodb_doublewriteONONONON
innodb_flush_log_at_trx_commit1111
innodb_flush_methodfsyncfsyncfsyncfsync
innodb_io_capacity2000200020002000
innodb_read_io_threads8888
innodb_write_io_threads8888
log_binONONONON
performance_schemaOFFOFFOFFOFF
rpl_semi_sync_master_enabledONONONON
rpl_semi_sync_master_timeout10000100001000010000
sync_binlog1000100010001000
version8.0.32-2.0.0.28.0.32-2.0.0.28.0.32-2.0.0.28.0.32-2.0.0.2
cpu_capacity73.97673.674.3

亚马逊Amazon RDS MySQL

AWS是所有云厂商中,性能管理做的最好的,对于不同代际的CPU在实例代码层面能够直接看到。可以看到,其性能整体上较为稳定,但本次进行两次测试,相比之前要更低一些,从配置和CPU计算能力指标来看,并没有明显差别。

data202409_m7g_tokyo202405_m6i_tokyo202405_m6i_hk202409_m6i_tokyo202409_m6i_hk
418243607355716393439
837816821668133136428
1674241247012410642712379
321412218022186801215718360
481839021092208871651620508
642116822540224901811822088
962399524937238942078223080
1282468725214240522244623425
1922593725296242402259023570
2562563425390241552232323578
3842562425313241032190223516
51225496249752380421591null
have_sslYESYESYESYESYES
innodb_buffer_pool_size11GB11GB11GB11GB11GB
innodb_doublewriteOFFOFFOFFOFFOFF
innodb_flush_log_at_trx_commit11111
innodb_flush_methodO_DIRECTO_DIRECTO_DIRECTO_DIRECTO_DIRECT
innodb_io_capacity200200200200200
innodb_read_io_threads44444
innodb_write_io_threads44444
log_binOFFOFFOFFOFFOFF
performance_schemaOFFOFFOFFOFFOFF
sync_binlog11111
version8.0.358.0.358.0.358.0.358.0.35
cpu_capacity190.7110.1112.8110.9113.9

微软Azure Database for MySQL

Azure的实例有着很多厂商类似的CPU代差导致的性能波动问题,在202409的测试中CPU计算能力指标为56.3,相比202405表现的63.9,也下降了12%,Azure Database for MySQL的Sysbench QPS性能也随之下降。

data202405_hk_4c16g202409_hk_4c16g202409_hk_2c8g
4173420251563
8329336542725
16597565484713
3210048103636859
4812973119737796
6414341127618060
9615451133008237
12816162133888258
19216663134788171
25616613129858338
38416605129048552
51216613129308882
have_sslYESYESYES
innodb_buffer_pool_size12GB12GB4GB
innodb_doublewriteOFFOFFOFF
innodb_flush_log_at_trx_commit111
innodb_flush_methodfsyncfsyncfsync
innodb_io_capacity200200200
log_binONONON
performance_schemaONONON
sync_binlog111
thread_pool_size442
version8.0.36-cluster8.0.37-azure8.0.37-azure
cpu_capacity63.956.331.6

谷歌云上的Cloud SQL Enterprise

Google云的MySQL托管服务在最近两年里做了非常多的增强,一方面推出了AlloyDB,托管MySQL也推出了Enterprise Plus版本。性能上,202409的测试中,与202405的测试性能并没有太大的差异;此外,它的Enterprise Plus版本的性能提升也非常明显,有着更多的CPU计算性能,也有着更多的内存资源。

data202405_plus_tokyo202409_plus_tokyo202405_hongkong202409_tokyo
4307817351428723
85733325925511341
169215595246862502
3213463980880424857
481526212578100176745
641563714360108378071
961641715540116229675
12816576160251211210620
19217185169381202711507
25618064175561240311872
38419342184711236112131
51219361189641237912106
have_sslYESYESYESYES
innodb_buffer_pool_size24GB24GB11GB11GB
innodb_doublewriteONONONON
innodb_flush_log_at_trx_commit1111
innodb_flush_methodO_DIRECTO_DIRECTO_DIRECTO_DIRECT
innodb_io_capacity5000500050005000
innodb_read_io_threads4444
innodb_write_io_threads4444
log_binONONONON
performance_schemaONONONON
sync_binlog1111
version8.0.31-google8.0.31-google8.0.31-google8.0.31-google
cpu_capacity82.67944.149.9

Oracle Cloud上的HeatWave MySQL

MySQL是属于Oracle的,Oracle也一直在持续的投入发展MySQL数据库与社区的建设。Oracle Cloud是最早推出MySQL 8.4、MySQL 9.0的云厂商,这次也一并测试这两个最新版本在Oracle Cloud上的表现。

可以看到,整个上各个版本在该测试模型下表现较为一致。仅,8.4.0(也就是8.4的第一个版本)在超高并发下,性能有明显退化,而该问题也在最新的8.4.2修复了。

dataoci_202409_8039oci_202409_8402oci_202404_80oci_202409_9001oci_202405_8400
435513606377333603055
859365378555752564788
1680548186840372876949
3283178029816678177546
4881308204800979116688
6478387981790180607395
9685048430809281727556
12881988286808980007850
19280438053786581121183
25679078034785175361156
38482098055780481511459
51283868030795878721813
have_sslYESNAYESNANA
innodb_buffer_pool_size17GB17GB17GB17GB17GB
innodb_doublewriteONONONONON
innodb_flush_log_at_trx_commit11111
innodb_flush_methodO_DIRECTO_DIRECTO_DIRECTO_DIRECTO_DIRECT
innodb_io_capacity12501250125012501250
innodb_read_io_threads22222
innodb_write_io_threads44444
log_binONONONONON
performance_schemaONONONONON
sync_binlog11111
thread_pool_size1616161616
version8.0.39-cloud8.4.2-u1-cloud8.0.36-u2-cloud9.0.1-u1-cloud8.4.0-cloud
cpu_capacity114.7111.3103.393.731.1

最后

这个测试可以很好的帮助开发者理解不同的云厂商之间RDS MySQL性能是存在差异的,甚至在同一个云厂商的不同区域,甚至在同一个云厂商的同一区域不同时间建立的实例,其性能都可能会有一定的差异。理解了这些,从而可以帮助开发者进行迁移或变更时,更好的进行数据库的容量规划。

Leave a Reply

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