架构原理
核心原理
- 可选:大容量性能优化
云上环境中的EVS存储盘带宽上限为800MB/s,若客户本地使用的是普通SATA SSD存储介质,同样可能因带宽上限不足,在数据量持续增长后面临大容量场景下的性能瓶颈,进而引发性能下降和抖动。此时,客户可借助NVMe Cache特性提升I/O带宽,并通过智能淘汰算法提高缓冲区命中率,从而优化数据库性能;同时,采用智能刷脏算法可缓解性能抖动问题。
如下图所示,通过在缓冲区BufferPool和EVS普通盘之间添加一个高速缓存NVMe Cache来缓解EVS普通盘的I/O压力,进而提升数据库的整体性能。在NVMe Cache上配置了LFU淘汰算法,通过优先移除访问频率较低的数据页,从而确保热数据保留在NVMe Cache高速缓存中。

NVMe Cache的详细介绍,参见《开发指南》中“特性使用指导 > NVMe缓存”章节。
为缓解I/O瓶颈,除通过高速NVMe SSD提升I/O处理能力外,还可通过提升缓冲区命中率以减少频繁的换入换出操作,从而降低I/O压力。传统数据库默认采用clock sweep算法,仅对内存中的数据页面维护访问热度,而淘汰至外存的页面则丢失热度记录。当这些页面重新加载时,热度计数需从零开始,但若其实际访问频繁,却因计数归零而面临再次被淘汰的风险。智能淘汰算法可以解决该问题,该算法对所有数据页面统一维护热度值。为节省存储空间,热度值通过sketch技术进行近似计算,并结合周期性衰减机制反映访问时间维度。同时引入LFU策略,将访问频率作为冷热度判断依据,综合时间衰减与访问频率,实现更精准的淘汰决策。通过该算法,整体数据库缓冲区命中率得以提升,减少换入换出操作带来的I/O压力,最终优化数据库性能。
智能淘汰算法可通过参数enable_buffer_evictor=on启用,其相关GUC参数包括:eviction_clean_page_percent_min和eviction_candidate_list_size。这些参数的详细介绍和使用方式,请参见《参考》中“数据库运行参数说明 > GUC参数说明 > 资源消耗 > 后端写线程”章节。
上述这些算法主要是为了解决数据库在大容量场景下的性能下降问题,而对于性能抖动问题,虽然有一定的缓解作用,但是无法从根本上解决该问题。由于内存与外存I/O能力之间存在差距,只要业务压力持续增大,I/O过载现象仍不可避免。为此,引入了基于反馈的算法策略,通过自适应调整业务压力来避免I/O过载,有效缓解性能抖动问题,提升数据库整体性能。本方案采用PID+BBR智能刷脏算法,如下图所示:

PID算法通过比例(P)、积分(I)、微分(D)三个参数动态调节系统误差,这里的误差是指数据库中I/O带宽与理想带宽之间的差异。算法的核心输入是业务产生的脏页生成速度。在大容量场景下,I/O带宽与数据库性能呈正相关关系,既要最大化利用I/O带宽,又要避免过载,需要自适应地探测I/O带宽上限。为此,采用BBR算法进行带宽探测。BBR算法基于网络瓶颈带宽和往返时延,动态优化数据传输速率,减少拥塞和延迟,其原理与网络带宽探测类似。通过将BBR与PID算法结合,系统能够自适应调节I/O压力,既保障数据库性能的稳定性,又实现I/O带宽的高效利用,从而达到性能最优化的目标。
智能刷脏算法特性需要通过参数enable_vldb_flow_control=on启用,具体详细参数介绍和使用方式,请参见《参考》中“数据库运行参数说明 > GUC参数说明 > NVMe”章节。
- 大容量运维优化
在大容量场景下,随着数据量持续增长,主备构建与备份恢复的时间显著延长,可能超出关键RTO指标。为缩短操作耗时,采取以下优化措施:
- 并行处理加速:通过并行化技术提升主备构建与备份恢复效率,缩短整体耗时;
- 数据压缩优化:采用冷热数据分层存储策略,对非热点数据实施行压缩,降低整体存储量;
- 日志按需回放:在数据库启动阶段,仅整理以页面为单位的日志链表,不立即执行日志回放。当业务访问尚未回放的页面时,动态加载对应日志,同时后台持续进行日志回放,实现快速响应与平稳加载。
这些措施协同作用,显著缩短主备构建与备份恢复时间,确保系统在大容量场景下的高效运行。