当前位置: 首页 > news >正文

磁盘类型选择对阿里云RDS MySQL的性能影响

测试说明

这是一个云数据库性能测试系列,旨在通过简单标准的性能测试,帮助开发者、企业了解云数据库的性能,以选择适合的规格与类型。这个系列还包括:

云数据库(RDS MySQL)性能深度测评与对比

阿里云RDS标准版(x86) vs 经济版(ARM)性能对比

华为云RDS通用型(x86) vs 鲲鹏(ARM)架构的性能对比

AWS基于x86 vs Graviton(ARM)的RDS MySQL性能对比(二)

AWS基于x86 vs Graviton(ARM)的RDS MySQL性能对比

阿里云RDS存储类型概述

阿里云RDS提供了较为丰富的存储类型选择,包括ESSD PL0、ESSD PL1、ESSD PL2、ESSD PL3、通用云盘、本地SSD。其中ESSD PL0仅在非常小的经济型规格中提供,并不在测试范围内。

根据阿里云的官方文档可以看到,从PL0到PL3,性能越来越强,并且IO能力也越来越稳定(详细参考:ESSD云盘@阿里云文档中心),当然价格也越来越贵。这里摘抄了文档中的描述,以及关键的部分,对比如下:

图片

“通用云盘”的说明可以参考阿里云文档描述:“通用云盘兼容ESSD云盘的所有特性,性能与ESSD PL1云盘相同,在ESSD云盘的基础上提供了IO突发能力。” 

所以,可以这样理解,通用云盘是一种具备ESSD PL1能力,同时具备更加灵活的IOPS突发增长能力的云盘。突发IOPS部分,将额外计费(有少部分的免费额度),突发IOPS部分的额外费用为:0.02元/万IO。

不同存储类型的性能趋势对比

那么,我们看看在RDS MySQL中这些不同的存储的性能表现。这里依旧选择了“企业级规格”进行比较(企业级规格的定义可以参考:云数据库(RDS MySQL)性能深度测评与对比),详细的性能如下:

图片

可以看到:

对于几种云盘的存储,RDS表现出了较为一致的性能,即,使用更好的存储的RDS总是能够获得了更好的性能:ESSD PL3 > ESSD PL2 > 通用存储 >> ESSD PL1

本地SSD,性能则是最差的存储,相较于ESSD PL1要低9%;相较于性能最好的ESSD PL3则要低18.7%。这一点与预期是不同的。

不过,相较于ESSD PL1/2/3之间成倍的价格增长,从这里的测试性能并没有展示出那么大的差距。即ESSD PL3的性能确实更好了,但是性价比是在降低的。

特别说明

注意到,在本次测试的规格”4vCPU16GB-高可用-独享-标准-默认参数模板-MySQL 8.0-ESSD PL1″与上次的“云数据库(RDS MySQL)性能深度测评”中的同样规格表现出了非常不同的性能。这次的测试中,相比上一次测试的同样规格性能要高约:41%。

图片

经过一些额外的测试,注意到,这个明显的性能差异是由于RDS所使用的不同CPU类型的性能差异所导致的,相当于AWS RDS实例中的m6i.xlarge(第三代Intel Xeon/Ice Lake实例)与m5.xlarge(Xeon® Platinum 8175M or 8259CL)之间的性能差异。只是,在阿里云,并没有通过规格代码将该选项暴露给用户。

所以,用户在购买RDS时,也需要注意,可以向阿里云的工程师咨询,如何通过地区、可用区或其他选项,以购买到最新代际的CPU所对应的RDS,获取更好的性能,如果性能对你的业务非常重要的时候。

对于其他云厂商,可能都会有类似的问题,也是需要注意的。不过因为阿里云RDS采用量更大、上线时间也更长,用户可能更容易遇到此类问题。

测试方法说明

参考文章“云数据库(RDS MySQL)性能深度测评”中的“测试方法说明”部分。

补充说明

以上价格为2023年12月,阿里云国内站杭州地区价格

在RDS选购中,ESSD PL2最低存储空间为500GB,PL3最低则为1500GB。这也会导致PL2、PL3存储成本会进一步增加,如果你使用的存储空间不需要那么大的话

这里选择的“企业级规格”是”4vCPU16GB-高可用-独享-标准-默认参数模板-MySQL 8.0″类型,选择了杭州J+K可用区,测试的ECS也在J可用区

这里使用的测试方法,对于IO依赖较强的是事务IO持久化的过程,数据文件写入一般来说并不会是瓶颈,这也限制了该测试对于某些现实场景的参考意义。对于CPU密集型的应用,例如,绝大部分的数据多缓存在内存中的场景,这也是较为常见的,该测试依旧有非常强的参考价值

关于作者:关于作者:orczhou,云数据库技术专家,NineData联合创始人,Oracle ACE(MySQL),《高性能MySQL》第三、四版译者,曾任阿里云数据库资深专家。

相关文章:

  • 硬核实战!mysql 错误操作整个表全部数据后如何恢复?附解决过程、思路(百万行SQL,通过binlog日志恢复)
  • 线段树/区间树(java实现版详解附leetcode例题)
  • MySQL——复合查询
  • 蓝桥杯宝藏排序算法(冒泡、选择、插入)
  • 幺模矩阵-线性规划的整数解特性
  • 使用vue-qr,报错in ./node_modules/vue-qr/dist/vue-qr.js
  • Openwrt AP 发射 WiFi 信号
  • 【Android 13】使用Android Studio调试系统应用之Settings移植(一):编译服务器的配置、AOSP源码的下载、编译、运行
  • SpringMVC之文件的下载
  • 【数据结构入门精讲 | 第十篇】考研408排序算法专项练习(二)
  • 体验一下 CodeGPT 插件
  • 如何入门 GPT 并快速跟上当前的大语言模型 LLM 进展?
  • VMware虚拟机安装Ubuntu系统教程
  • 单片机的RTC获取网络时间
  • yarn : 无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。‘yarn‘ 不是内部或外部命令,也不是可运行的程序.解决方案
  • 收藏网友的 源程序下载网
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Less 日常用法
  • mysql常用命令汇总
  • nodejs:开发并发布一个nodejs包
  • uva 10370 Above Average
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 诡异!React stopPropagation失灵
  • 回流、重绘及其优化
  • 码农张的Bug人生 - 初来乍到
  • 漂亮刷新控件-iOS
  • 巧用 TypeScript (一)
  • 为视图添加丝滑的水波纹
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • PostgreSQL之连接数修改
  • 从如何停掉 Promise 链说起
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 如何正确理解,内页权重高于首页?
  • 昨天1024程序员节,我故意写了个死循环~
  • # 数据结构
  • ###STL(标准模板库)
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #pragma 指令
  • #QT(一种朴素的计算器实现方法)
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #大学#套接字
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $(function(){})与(function($){....})(jQuery)的区别
  • (4)事件处理——(7)简单事件(Simple events)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (二)springcloud实战之config配置中心
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)springboot教学评价 毕业设计 641310
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (小白学Java)Java简介和基本配置
  • (转)Android学习笔记 --- android任务栈和启动模式