IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    admin发表于 2024-09-26 06:58:25
    love 0

    这是一个系列文章的一部分,该系列较为完整的对各个云厂商的RDS MySQL进行了测试,包括了阿里云、腾讯云、华为云、百度云、AWS、Azure、GCP、Oracle Cloud等,更多参考:云数据库RDS MySQL的性能。

    在不同的云厂商,购买相同规格的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的性能测试较为详细介绍了该测试,包括了:

    • 如何重现该测试:测试工具
    • 该测试中如何选择各个云厂商的4vCPU 16GB的实例:实例规格的选择
    • 如何理解该测试:云数据库RDS MySQL性能深度测评与对比@ACMUG-202401
    • 关于该测试的限制

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

    阿里云 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性能是存在差异的,甚至在同一个云厂商的不同区域,甚至在同一个云厂商的同一区域不同时间建立的实例,其性能都可能会有一定的差异。理解了这些,从而可以帮助开发者进行迁移或变更时,更好的进行数据库的容量规划。



沪ICP备19023445号-2号
友情链接