实测:云RDS MySQL性能是自建的1.6倍
1. 摘要
基于之前写的「云厂商 RDS MySQL 怎么选」的文章,为了进一步了解各云厂商在RDS MySQL数据库性能上的差异,本文将对自建MySQL、阿里云、腾讯云、华为云和AWS 的 RDS MySQL数据库性能进行对比说明。本文的压测结果仅作为参考,不作为购买建议。
2. 测试结果
从本文「测试详情」里的各个结论中得到如下结果:

说明: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的平均值之和作为性能对比指标。
实例规格分独享规格和通用规格:

- 独享规格:每个集群会独占所分配到的计算资源(如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
实例规格

客户端规格

补充:
自建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 读写场景
QPS:


TPS:


读写场景结论:
阿里云的通用型比独享型性能高23%;腾讯云的通用型比独享型性能高52%;华为云的通用型比独享型性能高8%。自建的Percona Server比社区版的MySQL 性能高7%;
「自建-MySQL」没有支持线程池,在512线程池之后,性能逐步下降;
「腾讯云-独享」在16线程之前性能不高,随着线程增加性能逐步上升,并保持稳定;
「自建MySQL/Percona」在2个线程的时候,性能比各云厂商的性能好;在4线程的时候和个云厂商性能差不多(腾讯云除外),在8个线程之后就远落后于个云厂商(腾讯云-独享除外);
从QPS和TPS的平均值之和,性能从高到低依次排序为:「阿里云-通用」>「华为云-通用」> 「腾讯云-通用」> 「华为云-独享」> 「阿里云-独享」> 「自建-Percona」> 「自建-MySQL」> 「AWS」> 「腾讯云-独享」
4.3.2 只读场景
QPS:


TPS:


只读场景结论:
阿里云的通用型比独享型性能高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 只写场景
QPS:


TPS:


只写场景结论:
阿里云的通用型比独享型性能高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实例」,并且在高并发的压力下尤为突出。所以在业务允许的情况下,上云是一个非常不错的选择。
实测:云RDS MySQL性能是自建的1.6倍的更多相关文章
- 记阿里云 RDS MySQL 的一个大坑
花了一个下午的时间,终于把一个阿里云 RDS MySQL 的一个大坑填上了,解决方法令人匪夷所思!绝对会让各位看官感到大吃一惊,阿里云 RDS MySQL 居然有这样 xx 的大坑! 问题 最近应业务 ...
- 阿里云RDS同步到本地自建mysql数据库从库
RDS mysql版本为5.6.29 x86_64 1.下载数据备份.binlog备份 内网中转?数据量不大,直接下载 下载数据备份(外网下载链接) wget -c "https://rds ...
- 关于阿里云 RDS mysql索引优化的一点经验
2019年9月5日10:02:34 本地调试 git https://github.com/barryvdh/laravel-debugbar composer require barryvdh/la ...
- 阿里云rds mysql数据库数据恢复到ecs中
背景:aliyun上的rds数据库快满了,于是删除了某个备份的表后面大boss说是有用的表,需要恢复回来,阿里云有7天内的物理全量备份(通过percona-xtrabackup备份的)第一时间应该延长 ...
- RDS mysql 与ECS自建mysql做主从备份
由于公司要组建一个数据中心,简而言之就是把各个地方的数据都同步到一个地方,做BI建模和数据分析. 一般来说这种需求是由hadoop来实现的,但由于预算不够..所以,来个low点的办法吧 以下主要是讲r ...
- 再也不怕数据丢失!阿里云RDS MySQL 8.0上线回收站功能
背景 MySQL 在生产环境使用过程中,会伴随着开发和运维人员的误操作,比如 DROP TABLE / DATABASE,这类 DDL 语句不具有可操作的回滚特性,而导致数据丢失,AliSQL 8.0 ...
- MySQL性能优化总结(转)https://yq.aliyun.com/articles/24249
摘要: 一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyIS ...
- 京东云开发者|京东云RDS数据迁移常见场景攻略
云时代已经来临,云上很多场景下都需要数据的迁移.备份和流转,各大云厂商也大都提供了自己的迁移工具.本文主要介绍京东云数据库为解决用户数据迁移的常见场景所提供的解决方案. 场景一:数据迁移上云 数据迁移 ...
- 1028阿里RDS如何恢复云数据库MySQL的备份文件到自建数据库
参照 https://help.aliyun.com/knowledge_detail/41817.html 恢复云数据库MySQL的备份文件到自建数据库 更新时间:2017-07-27 14:52: ...
随机推荐
- Shiro+springboot+mybatis+EhCache(md5+salt+散列)认证与授权-03
从上文:Shiro+springboot+mybatis(md5+salt+散列)认证与授权-02 当每次进行刷新时,都会从数据库重新查询数据进行授权操作,这样无疑给数据库造成很大的压力,所以需要引入 ...
- power app 解决方案中表导入问题
我们在powerapp中导出的表,解压后是会是乱码,导致在导入的时候会失败,或者导入数据不全. 使用 2 但是直接导入也会是乱码,所以需要将文件重新保存一下: 首先新建一个excel 选择要导入的那个 ...
- linux – tty,ttyS,pts,ptmx,vcs,vcsa设备文件之间的区别?(/dev/tty等)
linux – tty,ttyS,pts,ptmx,vcs,vcsa设备文件之间的区别? 终端有字符终端和图形终端两种模式.在linux的图形环境下,我们可以通过鼠标点击来完成所有的管理任务,这是图形 ...
- Alibaba Java诊断工具Arthas查看Dubbo动态代理类
原创/朱季谦 阅读Dubbo源码过程中,会发现,Dubbo消费端在做远程调用时,默认通过 Javassist 框架为服务接口生成动态代理类,接着再去调用代理类实现远程接口调用.在阅读这部分源码时,最后 ...
- Go Slice Tricks Cheat Sheet、Go 切片使用小妙招
AppendVector. Copy. Cut. Delete. Delete without preserving order. Cut (GC). Delete (GC). Delete with ...
- 前端vue之属性指令、style和class、条件渲染、列表渲染、事件处理、数据双向绑定、表单控制、v-model进阶
今日内容概要 属性指令 style和class 条件渲染 列表渲染 事件处理 数据的双向绑定 v-model进阶 购物车案例 内容详细 1.属性指令 <!DOCTYPE html> < ...
- 2021.12.06 平衡树——Treap
2021.12.06 平衡树--Treap https://www.luogu.com.cn/blog/HOJQVFNA/qian-xi-treap-ping-heng-shu 1.二叉搜索树 1.1 ...
- vulnhub devguru渗透笔记
devguru渗透笔记 信息收集 kali ip 目标ip 首先我们扫描一下开放端口 nmap -A -p- 192.168.20.143 Starting Nmap 7.91 ( https://n ...
- RecyclerView + SQLite 简易备忘录-----中(1)
在上一节讲完了登录界面的内容,现在随着Activity的跳转,来到MainActivity. 1.主界面activity_main.xml 由上图,activity_main.xml的内容很简单. 首 ...
- Dom基础(一):attribute和properrty的区别
properrty:修改对象属性不会体现到html结构中,针对DOM节点自带属性(id,className,style) attribute:修改html属性,会改变html结构,大多可以添加自定义属 ...