Author: 李薇
本文介绍PolarDB的共享存储PolarStore上弹性内存池(Elastic Memory Pool,简称EMP)I/O功能加速优化。
PolarDB通过计算与存储分离的架构设计,突破了传统MySQL采用本地磁盘部署时面临的IOPS性能瓶颈与存储容量限制。该架构利用分布式存储节点与计算节点间的高速网络互联实现资源解耦,但相较本地直连存储方式,这种分离架构会引入额外的网络传输延迟开销。
PolarDB采用共享存储架构支持海量数据存储,随着数据规模扩大,热点数据比例上升。当Buffer Pool容量与总存储空间的比例显著下降时,数据访问性能可能出现下降。
PolarStore的EMP功能基于RDMA高速网络互联与高性能存储介质,构建了一个高扩展性、低延迟的分布式共享内存资源池。实现了端到端远优于本地盘访问的I/O时延优化,有效缓解了突发性热点负载及大规模并发事务处理场景下的性能瓶颈。通过PFS智能数据分片与负载均衡,使系统在遭遇流量突增时仍能保持稳定的吞吐量(QPS)与端到端请求延迟(RT),显著提升了数据库在极端高流量环境中的QPS承载能力和响应效率,实现了存储层与计算层的深度协同优化。
业务快速发展产生的海量数据对数据库存储提出更高要求,云原生数据库PolarDB可通过弹性扩缩容应对存储需求。然而随着数据规模持续增长,Buffer Pool中热点数据占比逐渐下降,这使得I/O性能成为影响数据库性能的核心因素之一。I/O延迟与SQL执行时延及QPS之间存在直接关联,因此优化存储访问效率对数据库整体性能具有决定性影响。
EMP突破了单机资源有限的局限性,充分挖掘分布式存储系统的资源潜力,为大规模数据场景提供高性能、高扩展性存储支撑,能够缓存海量的热点数据,智能调度均衡。
传统共享存储的读I/O延迟源于计算节点需通过网络访问存储节点的磁盘数据,而EMP技术通过直接访问内存数据,其I/O延迟显著低于传统本地磁盘访问,从而有效提升数据库整体性能。 下图是开启EMP前后的I/O延迟变化,开启EMP后,延迟降低为未开启的1/3。
本文基于公有云真实案例,总结EMP的典型优化场景进行介绍。EMP在复杂业务场景中展现显著性能优势,为云计算环境提供高性价比的存储优化解决方案。
在业务高峰期,例如电商秒杀、游戏版本更新等场景,数据库面临突发性高并发读写压力,流量峰值可达日常的数百倍甚至千倍,热点数据激增导致Buffer Pool频繁换页,产生大量I/O,I/O延迟直接影响数据库的延迟。
EMP作为PolarStore的I/O加速方案,通过海量内存缓存空间显著降低I/O延迟,较本地盘延迟低一倍以上,有效支撑高流量业务,通过存储侧扩展缓存空间缓解热点压力,优化了高并发场景下的数据库性能表现。
线上真实数据某游戏行业用户活动期间开启EMP后,I/O延迟降至原延迟的1/5,QPS提升显著倍数,且完全消除超过1秒的慢SQL,平稳度过活动高峰。
下图为压力持续稳定高流量的情况下,EMP开启后I/O延迟、QPS、TPS的变化情况。
许多用户将数据库作为数据存储的主要存储组件,当用户业务需要版本更新迭代时,业务的服务可能需要重启,重新加载业务所需数据,业务所需的重点数据缓存会由于重启等原因失效,在版本更新期间需要大量的扫描数据重新加载到服务器中,而此时加载数据的速度决定业务版更停止服务的时间。
EMP能够将业务上的重要数据都缓存,当业务需要load时,加快load速度,从内存中直接访问相比从磁盘上读速度极致提升,线上某游戏客户使用EMP后,起服速度从50min提升到30min以内,直接提升了用户版更的体验,解决了客户的痛点。
现在很多使用数据库的业务,会使用BLOB存储数据,存储大块的二进制文件,例如图片、视频、或用户自定义的结果,自定义BLOB的好处是结构较为灵活,增加和修改数据内容时相比修改表结构更加容易,BLOB的结构通常数据很大,每行数据可达512KB甚至更大,大BLOB频繁的访问和更新会给数据库带来巨大的读写压力。
使用EMP后能够优化I/O延迟,BLOB的访问和更新提升明显。在电商业务、游戏业务、AI搜索业务实际使用场景中,系统响应时间和吞吐量都有很大的提升,充分证明了EMP技术在提升系统性能方面的优势。 下图模拟线上BLOB流量进行测试,BLOB长度为512KB,BLOB SELECT 性能提升90%,BLOB UPDATE 性能提升52%。
在数据库系统中,内存分层架构对查询性能至关重要。当查询命中数据库Buffer Pool时,性能良好。然而业务经常存在周期性查询模式或工作负载漂移的场景下,Buffer Pool受限于固定容量,导致缓存未命中率随时间周期性降低,I/O性能直接决定冷数据查询的响应效率。
批量查询具有数据量庞大、各查询语句热点数据分布离散的特点。在批量查询场景下,访问模式大多缺乏局部性,Buffer Pool将面临频繁的数据换入换出操作,导致缓存命中率显著下降。此时存储系统的I/O吞吐能力成为决定整体性能的核心制约因素,其表现直接影响查询延迟与吞吐量的平衡。
EMP通过构建分层的缓存架构,动态可将缓存容量提升至TB级,缓存热/温数据覆盖扩大,对于关键的冷查询和批量查询,EMP能够提升性能。EMP多层缓存架构有效缓解了传统单层缓冲池在长尾查询场景中的性能衰减问题,为混合负载与大数据分析提供了更稳定的性能保障。
下图对比同一个SQL Buffer Pool全命中、 EMP关闭和开启后Buffer Pool全不命中性能对比。测试冷查询对比,性能提升55%。
SELECT count(*) FROM sbtest FORCE INDEX(PRIMARY);
+---------+
|count(*)|
+---------+
|70000000|
+---------+
1 row in set (5.26 sec)
SELECT count(*) FROM sbtest FORCE INDEX(PRIMARY);
+---------+
|count(*)|
+---------+
|70000000|
+---------+
1 row in set (1 min 44.07 sec)
SELECT count(*) FROM sbtest FORCE INDEX(PRIMARY);
+---------+
|count(*)|
+---------+
|70000000|
+---------+
1 row in set (47.30 sec)
下图是用户近千条SQL批量查询的对比图,横坐标为SQL时延,纵坐标为SQL延迟的百分比,能够直观的对比出使用EMP后,SQL延迟大幅下降,批量SQL总延迟减少50%。