4

实测:云RDS MySQL性能是自建的1.6倍 - jyzhou

 1 year ago
source link: https://www.cnblogs.com/zhoujinyi/p/16392223.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1. 摘要

基于之前写的云厂商 RDS MySQL 怎么选的文章,为了进一步了解各云厂商在RDS MySQL数据库性能上的差异,本文将对自建MySQL、阿里云、腾讯云、华为云和AWS 的 RDS MySQL数据库性能进行对比说明。本文的压测结果仅作为参考,不作为购买建议。

2. 测试结果

从本文「测试详情」里的各个结论中得到如下结果

163084-20220620092004720-1994442365.png

说明100分制,按照本文后面测试详情结论进行评分。评分规则比较简单:最好的为100分,其次按照和100分的比值进行打分,如「自建-Percona」的QPS为1000,得分100分,「自建-MySQL」的QPS为900,则得90分。

补充:通用的性能可能会比独享高20%~30%,价格也比独享低,是因为通用存在超卖现象。但也有可能受超卖影响导致稳定性不高,请根据实际情况选择使用。

具体的信息可以看:「实测:云RDS MySQL性能是自建的1.6倍」,该内容同步发布于微信公众号:「云数据库技术」,欢迎订阅,第一时间获取信息。

3. 测试说明

为更好的对比各个云厂商数据库的性能,使用压测工具sysbench,该工具是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。

3.1 测试指标(sysbench值)

  • 每秒执行事务数TPS(Transactions Per Second)

  • 每秒执行请求数QPS(Queries Per Second)

3.2 测试说明

  • 分3个场景进行测试:「读写」、「只读」、「只写」,每个场景进行2~3000个线程压测,取压测下的QPS、TPS的平均值之和作为性能对比指标。

  • 实例规格分独享规格和通用规格:

163084-20220620092127614-1869548805.png
  • 独享规格:每个集群会独占所分配到的计算资源(如CPU),而不会与同一服务器上的其他集群共享资源,性能稳定可靠
  • 通用规格:同一服务器上的不同集群,会互相充分利用彼此空闲的计算资源(如CPU),通过复用计算资源享受规模红利,会出现超卖现象(性能更好,可能会受同一物理机上的其他通用规格实例影响),性价比高,稳定性不高

4. 测试详情

4.1 测试环境

  • 数据超过 innodb_buffer_pool_size

  • 高性能模板参数 

    sync_binlog                     = 1000
    innodb_flush_log_at_trx_commit  = 2
    innodb_flush_method             = O_DIRECT
    innodb_buffer_pool_size         = 12gb
    innodb_flush_neighbors          = 0
    max_prepared_stmt_count         = 1048575
    
    #Percona
    thread_handling                 = pool-of-threads
  • 实例规格

    163084-20220620092331312-1822963549.png
  • 客户端规格

    163084-20220620092417841-2026455039.png

  补充

    • 自建MySQL/Percona部署在阿里云的ECS上,数据盘是PL2(PL2规格的磁盘空间需要大于500G)

    • Percona Server 使用线程池功能

    • 主从服务端和客户端都在同一可用区和VPC

    • 各云厂商的RDS实例参数(除高性能模板参数外)均保持默认

    • 华为云的通用型规格是云盘SSD

4.2 测试方法

-- 准备数据
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=300  --threads={2~3000} oltp_read_write prepare

-- 运行workload
# OLTP读写混合
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=300   --threads={2~3000} --percentile=95 --report-interval=1 oltp_read_write run

# OLTP只读场景
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=300  --threads={2~3000} --percentile=95 --skip-trx=1 --report-interval=1 oltp_read_only run

# OLTP只写场景
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=300   --threads={2~3000} --percentile=95 --report-interval=1 oltp_write_only run

-- 清理数据
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=300   --threads={2~3000} --percentile=95  oltp_read_write/oltp_read_only/oltp_write_only cleanup

4.3 测试场景

对读写、只读、只写三个场景,线程数从2到3000进行压测说明。

4.3.1 读写场景

163084-20220620092935853-537522934.png
163084-20220620092954933-1267724133.png
163084-20220620093023977-1031782371.png
163084-20220620095013550-1358505868.jpg

读写场景结论

  • 阿里云的通用型比独享型性能高23%;腾讯云的通用型比独享型性能高52%;华为云的通用型比独享型性能高8%。自建的Percona Server比社区版的MySQL 性能高7%;

  • 「自建-MySQL」没有支持线程池,在512线程池之后,性能逐步下降;

  • 「腾讯云-独享」在16线程之前性能不高,随着线程增加性能逐步上升,并保持稳定;

  • 「自建MySQL/Percona」在2个线程的时候,性能比各云厂商的性能好;在4线程的时候和个云厂商性能差不多(腾讯云除外),在8个线程之后就远落后于个云厂商(腾讯云-独享除外);

从QPS和TPS的平均值之和,性能从高到低依次排序为:「阿里云-通用」>「华为云-通用」> 「腾讯云-通用」> 「华为云-独享」> 「阿里云-独享」> 「自建-Percona」> 「自建-MySQL」> 「AWS」> 「腾讯云-独享」

4.3.2 只读场景

163084-20220620093254650-1303715455.png
163084-20220620093312816-220893315.png
163084-20220620093346419-224205347.png
163084-20220620093405931-2124359680.png

只读场景结论:

  • 阿里云的通用型比独享型性能高30%;腾讯云的通用型比独享型性能高59%;华为云的通用型和独享型性能接近。自建的Percona Server比社区版的MySQL 性能高9%;

  • 「自建-MySQL」没有支持线程池,在512线程池之后,性能逐步下降;

  • 「腾讯云-独享」在32线程之前性能不高,随着线程增加性能逐步上升,并保持稳定(慢热);

  • 「自建MySQL/Percona」在4个线程之前,性能比各云厂商的性能好(除AWS和华为云-独享);在8个线程之后低于各云厂商(腾讯云-独享除外),32个线程的时候,「自建MySQL」开始低于「腾讯云-独享」,「腾讯云-独享」和「自建-Percona」相近。

从QPS和TPS的平均值之和,性能从高到低依次排序为:「华为云-独享」>「阿里云-通用」> 「华为云-通用」> 「腾讯云-通用」> 「阿里云-独享」> 「自建-Percona」> 「AWS」> 「自建-MySQL」> 「腾讯云-独享」

4.3.3 只写场景

163084-20220620093447743-1470656153.png
163084-20220620093516113-1706366656.png
163084-20220620093552736-325906853.png
163084-20220620093610480-1787761796.png

只写场景结论:

  • 阿里云的通用型比独享型性能高26%;腾讯云的通用型比独享型性能高39%;华为云的通用型比独享型性能高78%。自建的Percona Server比社区版的MySQL 性能高7%;

  • 「自建-MySQL」没有支持线程池,在512线程池之后,性能逐步下降;

  • 「腾讯云-独享」在32线程之前性能不高,随着线程增加性能逐步上升,并保持稳定(慢热);

  • 「自建MySQL/Percona」在8个线程之前,性能比各云厂商的性能好(除AWS外);在8个线程之后低于各云厂商,「华为云-独享」和「自建MySQL」相近。

从QPS和TPS的平均值之和,性能从高到低依次排序为:「华为云-通用」>「阿里云-通用」> 「腾讯云-通用」> 「阿里云-独享」> 「AWS」> 「腾讯云-独享」> 「自建-Percona」> 「自建-MySQL」> 「华为云-独享」

4.4 补充说明

  • 「腾讯云-独享」分数低是因为在线程数少的时候,性能不高(比自建实例低),即使在后续512线程的时候表现不错,但是在整体上取得的分数不高。

  • 线程池在大量短连接或者高并发情况下,有比较好的表现,没有支持线程池的「自建MySQL」和「AWS」在连接数大于2000的时候性能下降明显。

  • 「自建MySQL/Percona」在2~4个线程的压力下,整体性能比RDS要好,如果实例压力很小,可以使用自建的方式部署,不然用云数据库是首选。

  • AWS 连接线程数最高512(超过1024报错),另外还需要额外购买IOPS,本文压测的时候IOPS没有买到最大值,gp2和io1的区别可以看官方文档说明。

  • 「阿里云-独享」连接线程数最高为2400,因为3000超过了max_user_connections参数(规格限制了)。

  • 本文的测试结果是从5月份测试报告中得出,期间各云厂商可能有新功能发布和硬件升级,可能在看到文章的时候某些结论已经有所不同。

4.5 测试小结

通过对「读写」、「只读」、「只写」场景下的压测,并取压测结果QPS、TPS的平均值之和来统计,得到也可以直接看文章开头部分的测试结果):

  • 读写混合场景:「阿里云-通用」的性能最高,高出「华为云-通用」6%,高出「腾讯云-通用」13%,高出「华为云-独享」14%,高出「阿里云-独享」23%,高出「自建Percona」51%,高出「自建-MySQL」61%,高出「AWS」66%,高出「腾讯云-独享」72%。

  • 只读场景:「华为云-独享」的性能最高,高出「阿里云-通用」1%,高出「华为云-通用」3%,高出「腾讯云-通用」8%,高出「阿里云-独享」31%,高出「AWS」52%,高出「自建Percona」53%,高出「自建-MySQL」66%,高出「腾讯云-独享」72%。

  • 只写场景:「华为云-通用」的性能最高,高出「阿里云-通用」4%,高出「腾讯云-通用」7%,高出「阿里云-独享」31%,高出「AWS」40%,高出「腾讯云-独享」49%,高出「自建Percona」63%,高出「自建-MySQL」75%,高出「华为云」78%。

5. 总结

通过测试详情的说明,得出本文开头部分的「测试结果」,希望通过本文,对大家在选择云厂商RDS MySQL产品时有帮助。 

最后,通过云厂商 RDS MySQL 怎么选和本文的说明,可以看到「云RDS MySQL」无论在产品周边的运维能力还是性能上都明显优于「自建MySQL实例」,并且在高并发的压力下尤为突出。所以在业务允许的情况下,上云是一个非常不错的选择。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK