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

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

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

测试结果概述

在本次测试中:阿里云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参数发生了变化
threads/qps202409_beijing202409_hangzhou202405_beijing202405_hangzhou202405_shenzhen
451667102381246493101
880459702562975095234
1612211146607576109518461
321794622155105341358611498
482273427905109681531213603
642652032704113711583113427
962884336846117281656515104
1283026139697119331699615416
1922938038999122681738715723
2563113138356121461750115965
3843160139679121011749416805
5123247240333119371812016880
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_capacity74.980.433.339.745.3

腾讯云 TencentDB for MySQL

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

threads/qps202409_beijing_exclusive202405_beijing_exclusive202405_beijing_universal202405_shanghai_exclusive
45592578354016960
89936101571014811791
1616141165571866418661
3222336229703166824731
4824770260833538527420
6426495278863633629471
9629077303373641831167
12829918313553625731506
19230610323233639431747
25631052325823595531708
38431224328033448132574
51231805329623316433472
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_capacity93.392170.5169.3

华为云 RDS MySQL

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

threads/qps202409_beijing_x86202405_beijing_arm202405_beijing_x86
4255718952623
8467434394770
16822961868694
3213520943214192
48178491117417621
64201141252719927
96208831298020555
128201281302920151
192205211334520648
256211871421221796
384217291505622957
512226471517223177
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-2310038.0.28-2310028.0.28-231002
cpu_capacity163.689.5167.6

百度云 RDS MySQL

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

threads/qps202409_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计算能力指标来看,并没有明显差别。

threads/qps202409_m6i_tokyo202409_m7g_tokyo202409_m6i_hk202405_m6i_hk202405_m6i_tokyo
416391824343935573607
833133781642866816821
1664277424123791241012470
321215714122183601868018022
481651618390205082088721092
641811821168220882249022540
962078223995230802389424937
1282244624687234252405225214
1922259025937235702424025296
2562232325634235782415525390
3842190225624235162410325313
5122159125496null2380424975
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_capacity110.9190.7113.9112.8110.1

微软Azure Database for MySQL

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

threads/qps202409_hk_4c16g202409_hk_2c8g202405_hk_4c16g
4202515631734
8365427253293
16654847135975
3210363685910048
4811973779612973
6412761806014341
9613300823715451
12813388825816162
19213478817116663
25612985833816613
38412904855216605
51212930888216613
have_sslYESYESYES
innodb_buffer_pool_size12GB4GB12GB
innodb_doublewriteOFFOFFOFF
innodb_flush_log_at_trx_commit111
innodb_flush_methodfsyncfsyncfsync
innodb_io_capacity200200200
log_binONONON
performance_schemaONONON
sync_binlog111
thread_pool_size424
version8.0.37-azure8.0.37-azure8.0.36-cluster
cpu_capacity56.331.663.9

谷歌云上的Cloud SQL Enterprise

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

threads/qps202409_plus_tokyo202409_tokyo202405_hongkong202405_plus_tokyo
4173572314283078
83259134125515733
165952250246869215
3298084857804213463
481257867451001715262
641436080711083715637
961554096751162216417
12816025106201211216576
19216938115071202717185
25617556118721240318064
38418471121311236119342
51218964121061237919361
have_sslYESYESYESYES
innodb_buffer_pool_size24GB11GB11GB24GB
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_capacity7949.944.182.6

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修复了。

threads/qpsoci_202409_8402oci_202409_8039oci_202409_9001oci_202404_80oci_202405_8400
436063551336037733055
853785936525655574788
1681868054728784036949
3280298317781781667546
4882048130791180096688
6479817838806079017395
9684308504817280927556
12882868198800080897850
19280538043811278651183
25680347907753678511156
38480558209815178041459
51280308386787279581813
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.4.2-u1-cloud8.0.39-cloud9.0.1-u1-cloud8.0.36-u2-cloud8.4.0-cloud
cpu_capacity111.3114.793.7103.331.1
have_sslNAYESNAYESNA

最后

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

Leave a Reply

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