当应用程序访问数据时, MySQL 将数据从磁盘读取到内存,或将内存数据写入磁盘是数据库系统常见的IO操作。相比内存操作,磁盘IO操作运行速度相对较慢,需消耗较多的时间。当出现大规模数据读取 比如全表扫描,频繁数据读写请求时,高并发的写入更新数据,IO操作可能成为系统瓶颈。
我们知道 MySQL 的缓存池(Buffer Pool)用于缓存从磁盘取的数据。当一个数据块需要被从磁盘读取或被写入磁盘时,系统会先从缓存池中查找数据块:
若存在,则直接从缓存池中读写数据。
若不存在,则会从磁盘读写数据,并存储到缓存池。
基于此读写逻辑,缓存池能够有效减少磁盘IO操作,提升实例的IO性能。但缓存池的大小受系统内存大小的限制,当内存不足时,缓存池大小受限,从而影响IO性能。
为此 RDS MySQL 引入基于通用云盘的 缓存池拓展(Buffer Pool Extension) 的技术特性,帮助扩展缓存池的大小,并结合RDS引擎内核能力,从技术上提升RDS MySQL的整体读写性能,让实例在一定时间内执行更多的读写命令,提高磁盘IO效率和系统的响应速度,实现缓存加速。
通用云盘的IO加速功能利用了缓存池拓展技术,在不提升成本的情况下,将ESSD形态的性能进行衍生。基于冷热数据分离的思想,通过扩展InnoDB的缓存池(Buffer Pool),将数据页缓存到Buffer Pool Extension中,将温数据存放在Buffer Pool Extension中,使得InnoDB可以灵活使用多种存储介质,从而获得QPS性能提升。
缓存池拓展的部署架构如下图所示。
2. 共同开启BPE的前提下,规格8c16g的实例相对于4c8g实例,性能提升约36.55%。 3. 4c8g 开启 BPE 比 8c16g 不开启BPE 性能高 38%。 注: 不同售卖地域,可能因为潜在的机器配置导致性能有所差异。
四 使用 IO 加速的技术和成本收益
引入IO加速功能的缓存池拓展后,RDS MySQL的存储结构分为三个层次,能够针对不同的数据存储场景和诉求,充分利用阿里云底座的各种存储介质,实现实例的IO性能提升:
缓存池拓展所在的磁盘比通用云盘延迟更低。同时,大幅降低通用云盘IO抖动对数据库运行的影响,提升稳定性。
在降本增效的大环境下,用户在无任何成本变化和业务改动的情况下,就可以获得数据库IO性能的大幅度提升 30%以上。
因为存储架构的原因,该功能只是在特定的区域开通,还无法不普及到所有售卖区域。 有兴趣的朋友可以访问 阅读原文 查看官方文档。