优化 Lakebase Postgres 计算缓存

优化 Lakebase Postgres 计算缓存

💡 原文英文,约1600词,阅读约需6分钟。
📝

内容提要

Databricks 为 Lakebase Postgres 优化计算节点缓存:在固定规格计算上停用本地文件缓存,将共享缓冲区设为内存的75%,并启用2MB大页以减少页表和TLB开销。实测吞吐翻倍、延迟下降、CPU占用降低,存储读取请求大减。下一步将把大共享缓冲区扩展至自动伸缩计算。

🔎

延伸解读

缓存架构调整的实际影响

Lakebase Postgres 在固定规格计算上停用本地文件缓存(LFC),将共享缓冲区设为内存的75%,并启用2MB大页。这一调整消除了原先约1GB的共享缓冲区上限,使热数据保留在最快的内存层,避免级联到本地文件存储。同时,由于缓存完全位于Postgres内部,消除了双重缓冲,1GB缓存数据仅消耗1GB内存,而非之前的2GB。

大页机制的性能收益与实现要点

Postgres每个后端进程需独立映射共享缓冲区,默认4KB页会导致大量页表项和TLB未命中。改用2MB大页后,页表大小减少512倍,显著降低TLB未命中率。实测显示,尾读延迟降低约40%,CPU利用率下降约30%。Lakebase在虚拟机层面通过显式HugeTLB页提供支持,确保从宿主机到客户机内核的一致性,避免因某一层缺失而削弱收益。

生产环境实测效果

在大型生产端点上,启用新配置后吞吐量翻倍,p50和p99延迟降低,存储GetPage/s从约8K/秒降至约1.5K/秒。另一端点吞吐量提升约43%,计算缓存命中率接近100%,CPU使用从20核降至4核。这些改进已在固定规格计算(CU>=80)上生效,用户可通过show shared_buffers验证,80 CU端点应返回20971520。

未来方向与自动伸缩挑战

当前优化仅适用于固定规格计算,因为共享缓冲区尚不能动态调整。下一步是将大共享缓冲区扩展至自动伸缩计算,这需要动态扩展和收缩共享缓冲区,并精确分配所需的大页数量。Databricks已开发协议,使大页随动态共享缓冲区同步伸缩,以在高并发和大内存下保持高效地址转换。后续文章将深入技术细节及对开源Postgres的贡献。

Q&A

Lakebase Postgres 在计算缓存方面做了哪些优化?

Lakebase Postgres 在固定规格计算上停用了本地文件缓存(LFC),将共享缓冲区设置为内存的75%,并启用了2MB大页以减少页表和TLB开销。

为什么 Lakebase Postgres 要停用本地文件缓存?

因为本地文件缓存(LFC)作为共享缓冲区的补充,在较大工作集下,共享缓冲区被限制在1GB,导致大多数缓存命中经过较慢的LFC层。停用LFC并扩大共享缓冲区可以将热数据保留在最快的内存层。

启用大页对 Lakebase Postgres 性能有什么影响?

启用2MB大页减少了页表大小和TLB未命中率,基准测试显示尾部读延迟降低高达40%,CPU利用率降低高达30%。

Lakebase Postgres 优化后吞吐量和延迟有何变化?

优化后吞吐量翻倍,延迟下降,CPU占用降低,存储读取请求大减。例如,一个端点吞吐量增加约43%,CPU使用从20核降至4核。

如何检查 Lakebase Postgres 是否启用了大共享缓冲区?

可以在 Postgres 连接中运行 show shared_buffers 命令。例如,一个80 CU的端点应看到值20971520。

Lakebase Postgres 下一步计划是什么?

下一步是将大共享缓冲区扩展到自动伸缩计算,需要动态扩展和收缩共享缓冲区,并同步调整大页分配。

🏷️

标签

➡️

继续阅读