这是一个系列文章的一部分,该系列较为完整的对各个云厂商的RDS MySQL进行了测试,包括了阿里云、腾讯云、华为云、百度云、AWS、Azure、GCP、Oracle Cloud等,更多参考:云数据库RDS MySQL的性能。
在不同的云厂商,购买相同规格的MySQL实例(如4vCPU-16GB),获得的性能相同吗?
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 |
在本次测试中:阿里云RDS MySQL性能表现最好,极限的QPS达到了4万;其次是腾讯云,达到了3.2万;第二梯队是华为云、百度云和AWS,极限的QPS约2.2万;之后是Azure、Google云,极限QPS约1.2万;最后是Oracle云,极限QPS约8500。详细的数据和趋势图,可以参考以上的图、表,这里不再详述。
“单位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,两个地区的实例性能相差明显:4万 vs 3.2万。并且,本次测试性能相比于之前的测试,性能增长明显。从这里的观察来看:
performance_schema
thread_pool
,注意到,thread_pool_size参数发生了变化threads/qps | 202409_beijing | 202409_hangzhou | 202405_beijing | 202405_hangzhou | 202405_shenzhen |
---|---|---|---|---|---|
4 | 5166 | 7102 | 3812 | 4649 | 3101 |
8 | 8045 | 9702 | 5629 | 7509 | 5234 |
16 | 12211 | 14660 | 7576 | 10951 | 8461 |
32 | 17946 | 22155 | 10534 | 13586 | 11498 |
48 | 22734 | 27905 | 10968 | 15312 | 13603 |
64 | 26520 | 32704 | 11371 | 15831 | 13427 |
96 | 28843 | 36846 | 11728 | 16565 | 15104 |
128 | 30261 | 39697 | 11933 | 16996 | 15416 |
192 | 29380 | 38999 | 12268 | 17387 | 15723 |
256 | 31131 | 38356 | 12146 | 17501 | 15965 |
384 | 31601 | 39679 | 12101 | 17494 | 16805 |
512 | 32472 | 40333 | 11937 | 18120 | 16880 |
have_ssl | DISABLED | DISABLED | DISABLED | DISABLED | DISABLED |
innodb_buffer_pool_size | 9.75GB | 9.75GB | 9.75GB | 9.75GB | 9.75GB |
innodb_doublewrite | ON | ON | ON | ON | ON |
innodb_flush_log_at_trx_commit | 1 | 1 | 1 | 1 | 1 |
innodb_flush_method | O_DIRECT | O_DIRECT | O_DIRECT | O_DIRECT | O_DIRECT |
innodb_io_capacity | 20000 | 20000 | 20000 | 20000 | 20000 |
innodb_read_io_threads | 4 | 4 | 4 | 4 | 4 |
innodb_write_io_threads | 4 | 4 | 4 | 4 | 4 |
log_bin | ON | ON | ON | ON | ON |
performance_schema | OFF | OFF | ON | ON | ON |
rpl_semi_sync_master_enabled | ON | ON | ON | ON | ON |
rpl_semi_sync_master_timeout | 1000 | 1000 | 1000 | 1000 | 1000 |
sync_binlog | 1 | 1 | 1 | 1 | 1 |
thread_pool_size | 8 | 8 | 1 | 1 | 1 |
version | 8.0.36 | 8.0.36 | 8.0.34 | 8.0.34 | 8.0.34 |
cpu_capacity | 74.9 | 80.4 | 33.3 | 39.7 | 45.3 |
本次仅测试了腾讯云北京、独享实例,整体的性能表现依旧非常好。纵向的,与5月份的测试对比,性能较为稳定,没有太大的波动。值得注意的是,相比于之前(202405上海区域),本次测试腾讯云的实例使用了更少的“CPU计算能力”,但依旧获得了与之前测试较为接近的性能表现。
threads/qps | 202409_beijing_exclusive | 202405_beijing_exclusive | 202405_beijing_universal | 202405_shanghai_exclusive |
---|---|---|---|---|
4 | 5592 | 5783 | 5401 | 6960 |
8 | 9936 | 10157 | 10148 | 11791 |
16 | 16141 | 16557 | 18664 | 18661 |
32 | 22336 | 22970 | 31668 | 24731 |
48 | 24770 | 26083 | 35385 | 27420 |
64 | 26495 | 27886 | 36336 | 29471 |
96 | 29077 | 30337 | 36418 | 31167 |
128 | 29918 | 31355 | 36257 | 31506 |
192 | 30610 | 32323 | 36394 | 31747 |
256 | 31052 | 32582 | 35955 | 31708 |
384 | 31224 | 32803 | 34481 | 32574 |
512 | 31805 | 32962 | 33164 | 33472 |
have_ssl | DISABLED | DISABLED | DISABLED | DISABLED |
innodb_buffer_pool_size | 12GB | 12GB | 12GB | 12GB |
innodb_doublewrite | ON | ON | ON | ON |
innodb_flush_log_at_trx_commit | 1 | 1 | 1 | 1 |
innodb_flush_method | O_DIRECT | O_DIRECT | O_DIRECT | O_DIRECT |
innodb_io_capacity | 20000 | 20000 | 20000 | 20000 |
innodb_read_io_threads | 4 | 4 | 4 | 4 |
innodb_write_io_threads | 4 | 4 | 4 | 4 |
log_bin | ON | ON | ON | ON |
performance_schema | OFF | OFF | OFF | OFF |
rpl_semi_sync_master_enabled | ON | ON | ON | ON |
rpl_semi_sync_master_timeout | 10000 | 10000 | 10000 | 10000 |
sync_binlog | 1 | 1 | 1 | 1 |
thread_pool_size | 4 | 4 | 4 | 4 |
version | 8.0.30-txsql | 8.0.30-txsql | 8.0.30-txsql | 8.0.30-txsql |
cpu_capacity | 93.3 | 92 | 170.5 | 169.3 |
本次测试华为云表现稳定,与之前的测试表现非常接近:性能数据接近,版本几乎相同(build号从“8.0.28-231002”升为了“8.0.28-231003”),所提供的CPU计算能力也几乎相同。注意到,华为云RDS MySQL一直是所有云厂商,所提供的计算能力最高的厂商。似乎,是这样,别的云厂商的的4c16g通常是,4个超线程,而华为云似乎真的是提供了4个核(cores)。
threads/qps | 202409_beijing_x86 | 202405_beijing_arm | 202405_beijing_x86 |
---|---|---|---|
4 | 2557 | 1895 | 2623 |
8 | 4674 | 3439 | 4770 |
16 | 8229 | 6186 | 8694 |
32 | 13520 | 9432 | 14192 |
48 | 17849 | 11174 | 17621 |
64 | 20114 | 12527 | 19927 |
96 | 20883 | 12980 | 20555 |
128 | 20128 | 13029 | 20151 |
192 | 20521 | 13345 | 20648 |
256 | 21187 | 14212 | 21796 |
384 | 21729 | 15056 | 22957 |
512 | 22647 | 15172 | 23177 |
have_ssl | DISABLED | DISABLED | DISABLED |
innodb_buffer_pool_size | 9GB | 9GB | 9GB |
innodb_doublewrite | ON | ON | ON |
innodb_flush_log_at_trx_commit | 1 | 1 | 1 |
innodb_flush_method | O_DIRECT | O_DIRECT | O_DIRECT |
innodb_io_capacity | 12000 | 12000 | 12000 |
innodb_read_io_threads | 4 | 4 | 4 |
innodb_write_io_threads | 4 | 4 | 4 |
log_bin | ON | ON | ON |
performance_schema | OFF | OFF | OFF |
rpl_semi_sync_master_enabled | ON | ON | ON |
rpl_semi_sync_master_timeout | 10000 | 10000 | 10000 |
sync_binlog | 1 | 1 | 1 |
version | 8.0.28-231003 | 8.0.28-231002 | 8.0.28-231002 |
cpu_capacity | 163.6 | 89.5 | 167.6 |
百度云RDS提供非常稳定的性能。如下图数据所示,四次测试,整体的性能表现非常稳定,地域差异也比较小。
threads/qps | 202409_beijing | 202405_beijing | 202405_beijing_extra | 202405_guangzhou |
---|---|---|---|---|
4 | 2206 | 2157 | 2178 | 2712 |
8 | 4101 | 4041 | 4051 | 4837 |
16 | 7298 | 7041 | 7292 | 8246 |
32 | 12022 | 11816 | 11990 | 12785 |
48 | 16448 | 16049 | 16243 | 16047 |
64 | 18187 | 18554 | 17888 | 18618 |
96 | 21007 | 20378 | 20387 | 19355 |
128 | 21029 | 20135 | 20915 | 19797 |
192 | 22091 | 20915 | 20556 | 19858 |
256 | 21665 | 21098 | 21200 | 19406 |
384 | 21167 | 21131 | 21125 | 20157 |
512 | 21627 | 21204 | 20737 | 19542 |
have_ssl | DISABLED | DISABLED | DISABLED | DISABLED |
innodb_buffer_pool_size | 12GB | 12GB | 12GB | 12GB |
innodb_doublewrite | ON | ON | ON | ON |
innodb_flush_log_at_trx_commit | 1 | 1 | 1 | 1 |
innodb_flush_method | fsync | fsync | fsync | fsync |
innodb_io_capacity | 2000 | 2000 | 2000 | 2000 |
innodb_read_io_threads | 8 | 8 | 8 | 8 |
innodb_write_io_threads | 8 | 8 | 8 | 8 |
log_bin | ON | ON | ON | ON |
performance_schema | OFF | OFF | OFF | OFF |
rpl_semi_sync_master_enabled | ON | ON | ON | ON |
rpl_semi_sync_master_timeout | 10000 | 10000 | 10000 | 10000 |
sync_binlog | 1000 | 1000 | 1000 | 1000 |
version | 8.0.32-2.0.0.2 | 8.0.32-2.0.0.2 | 8.0.32-2.0.0.2 | 8.0.32-2.0.0.2 |
cpu_capacity | 73.9 | 76 | 73.6 | 74.3 |
AWS是所有云厂商中,性能管理做的最好的,对于不同代际的CPU在实例代码层面能够直接看到。可以看到,其性能整体上较为稳定,但本次进行两次测试,相比之前要更低一些,从配置和CPU计算能力指标来看,并没有明显差别。
threads/qps | 202409_m6i_tokyo | 202409_m7g_tokyo | 202409_m6i_hk | 202405_m6i_hk | 202405_m6i_tokyo |
---|---|---|---|---|---|
4 | 1639 | 1824 | 3439 | 3557 | 3607 |
8 | 3313 | 3781 | 6428 | 6681 | 6821 |
16 | 6427 | 7424 | 12379 | 12410 | 12470 |
32 | 12157 | 14122 | 18360 | 18680 | 18022 |
48 | 16516 | 18390 | 20508 | 20887 | 21092 |
64 | 18118 | 21168 | 22088 | 22490 | 22540 |
96 | 20782 | 23995 | 23080 | 23894 | 24937 |
128 | 22446 | 24687 | 23425 | 24052 | 25214 |
192 | 22590 | 25937 | 23570 | 24240 | 25296 |
256 | 22323 | 25634 | 23578 | 24155 | 25390 |
384 | 21902 | 25624 | 23516 | 24103 | 25313 |
512 | 21591 | 25496 | null | 23804 | 24975 |
have_ssl | YES | YES | YES | YES | YES |
innodb_buffer_pool_size | 11GB | 11GB | 11GB | 11GB | 11GB |
innodb_doublewrite | OFF | OFF | OFF | OFF | OFF |
innodb_flush_log_at_trx_commit | 1 | 1 | 1 | 1 | 1 |
innodb_flush_method | O_DIRECT | O_DIRECT | O_DIRECT | O_DIRECT | O_DIRECT |
innodb_io_capacity | 200 | 200 | 200 | 200 | 200 |
innodb_read_io_threads | 4 | 4 | 4 | 4 | 4 |
innodb_write_io_threads | 4 | 4 | 4 | 4 | 4 |
log_bin | OFF | OFF | OFF | OFF | OFF |
performance_schema | OFF | OFF | OFF | OFF | OFF |
sync_binlog | 1 | 1 | 1 | 1 | 1 |
version | 8.0.35 | 8.0.35 | 8.0.35 | 8.0.35 | 8.0.35 |
cpu_capacity | 110.9 | 190.7 | 113.9 | 112.8 | 110.1 |
Azure的实例有着很多厂商类似的CPU代差导致的性能波动问题,在202409的测试中CPU计算能力指标为56.3,相比202405表现的63.9,也下降了12%,Azure Database for MySQL的Sysbench QPS性能也随之下降。
threads/qps | 202409_hk_4c16g | 202409_hk_2c8g | 202405_hk_4c16g |
---|---|---|---|
4 | 2025 | 1563 | 1734 |
8 | 3654 | 2725 | 3293 |
16 | 6548 | 4713 | 5975 |
32 | 10363 | 6859 | 10048 |
48 | 11973 | 7796 | 12973 |
64 | 12761 | 8060 | 14341 |
96 | 13300 | 8237 | 15451 |
128 | 13388 | 8258 | 16162 |
192 | 13478 | 8171 | 16663 |
256 | 12985 | 8338 | 16613 |
384 | 12904 | 8552 | 16605 |
512 | 12930 | 8882 | 16613 |
have_ssl | YES | YES | YES |
innodb_buffer_pool_size | 12GB | 4GB | 12GB |
innodb_doublewrite | OFF | OFF | OFF |
innodb_flush_log_at_trx_commit | 1 | 1 | 1 |
innodb_flush_method | fsync | fsync | fsync |
innodb_io_capacity | 200 | 200 | 200 |
log_bin | ON | ON | ON |
performance_schema | ON | ON | ON |
sync_binlog | 1 | 1 | 1 |
thread_pool_size | 4 | 2 | 4 |
version | 8.0.37-azure | 8.0.37-azure | 8.0.36-cluster |
cpu_capacity | 56.3 | 31.6 | 63.9 |
Google云的MySQL托管服务在最近两年里做了非常多的增强,一方面推出了AlloyDB,托管MySQL也推出了Enterprise Plus版本。性能上,202409的测试中,与202405的测试性能并没有太大的差异;此外,它的Enterprise Plus
版本的性能提升也非常明显,有着更多的CPU计算性能,也有着更多的内存资源。
threads/qps | 202409_plus_tokyo | 202409_tokyo | 202405_hongkong | 202405_plus_tokyo |
---|---|---|---|---|
4 | 1735 | 723 | 1428 | 3078 |
8 | 3259 | 1341 | 2551 | 5733 |
16 | 5952 | 2502 | 4686 | 9215 |
32 | 9808 | 4857 | 8042 | 13463 |
48 | 12578 | 6745 | 10017 | 15262 |
64 | 14360 | 8071 | 10837 | 15637 |
96 | 15540 | 9675 | 11622 | 16417 |
128 | 16025 | 10620 | 12112 | 16576 |
192 | 16938 | 11507 | 12027 | 17185 |
256 | 17556 | 11872 | 12403 | 18064 |
384 | 18471 | 12131 | 12361 | 19342 |
512 | 18964 | 12106 | 12379 | 19361 |
have_ssl | YES | YES | YES | YES |
innodb_buffer_pool_size | 24GB | 11GB | 11GB | 24GB |
innodb_doublewrite | ON | ON | ON | ON |
innodb_flush_log_at_trx_commit | 1 | 1 | 1 | 1 |
innodb_flush_method | O_DIRECT | O_DIRECT | O_DIRECT | O_DIRECT |
innodb_io_capacity | 5000 | 5000 | 5000 | 5000 |
innodb_read_io_threads | 4 | 4 | 4 | 4 |
innodb_write_io_threads | 4 | 4 | 4 | 4 |
log_bin | ON | ON | ON | ON |
performance_schema | ON | ON | ON | ON |
sync_binlog | 1 | 1 | 1 | 1 |
version | 8.0.31-google | 8.0.31-google | 8.0.31-google | 8.0.31-google |
cpu_capacity | 79 | 49.9 | 44.1 | 82.6 |
MySQL是属于Oracle的,Oracle也一直在持续的投入发展MySQL数据库与社区的建设。Oracle Cloud是最早推出MySQL 8.4、MySQL 9.0的云厂商,这次也一并测试这两个最新版本在Oracle Cloud上的表现。
可以看到,整个上各个版本在该测试模型下表现较为一致。仅,8.4.0(也就是8.4的第一个版本)在超高并发下,性能有明显退化,而该问题也在最新的8.4.2修复了。
threads/qps | oci_202409_8402 | oci_202409_8039 | oci_202409_9001 | oci_202404_80 | oci_202405_8400 |
---|---|---|---|---|---|
4 | 3606 | 3551 | 3360 | 3773 | 3055 |
8 | 5378 | 5936 | 5256 | 5557 | 4788 |
16 | 8186 | 8054 | 7287 | 8403 | 6949 |
32 | 8029 | 8317 | 7817 | 8166 | 7546 |
48 | 8204 | 8130 | 7911 | 8009 | 6688 |
64 | 7981 | 7838 | 8060 | 7901 | 7395 |
96 | 8430 | 8504 | 8172 | 8092 | 7556 |
128 | 8286 | 8198 | 8000 | 8089 | 7850 |
192 | 8053 | 8043 | 8112 | 7865 | 1183 |
256 | 8034 | 7907 | 7536 | 7851 | 1156 |
384 | 8055 | 8209 | 8151 | 7804 | 1459 |
512 | 8030 | 8386 | 7872 | 7958 | 1813 |
innodb_buffer_pool_size | 17GB | 17GB | 17GB | 17GB | 17GB |
innodb_doublewrite | ON | ON | ON | ON | ON |
innodb_flush_log_at_trx_commit | 1 | 1 | 1 | 1 | 1 |
innodb_flush_method | O_DIRECT | O_DIRECT | O_DIRECT | O_DIRECT | O_DIRECT |
innodb_io_capacity | 1250 | 1250 | 1250 | 1250 | 1250 |
innodb_read_io_threads | 2 | 2 | 2 | 2 | 2 |
innodb_write_io_threads | 4 | 4 | 4 | 4 | 4 |
log_bin | ON | ON | ON | ON | ON |
performance_schema | ON | ON | ON | ON | ON |
sync_binlog | 1 | 1 | 1 | 1 | 1 |
thread_pool_size | 16 | 16 | 16 | 16 | 16 |
version | 8.4.2-u1-cloud | 8.0.39-cloud | 9.0.1-u1-cloud | 8.0.36-u2-cloud | 8.4.0-cloud |
cpu_capacity | 111.3 | 114.7 | 93.7 | 103.3 | 31.1 |
have_ssl | NA | YES | NA | YES | NA |
这个测试可以很好的帮助开发者理解不同的云厂商之间RDS MySQL性能是存在差异的,甚至在同一个云厂商的不同区域,甚至在同一个云厂商的同一区域不同时间建立的实例,其性能都可能会有一定的差异。理解了这些,从而可以帮助开发者进行迁移或变更时,更好的进行数据库的容量规划。