Hasty Briefsbeta

双语

Why Huge Pages matter for Postgres

4 hours ago
  • #Memory Optimization
  • #Huge Pages
  • #PostgreSQL
  • 大页是较大的内存单元(2MB 或 1GB),相比标准的 4KB 页面,它允许一个页表项覆盖更多的内存,从而减少了 CPU 的 TLB 必须缓存的转换次数。
  • Postgres 对页面大小很敏感,因为它的 shared_buffers 缓存是由每个后端的页表映射的;使用 4KB 页面时,大型缓存可能会消耗过多的 RAM 用于页表,并导致 TLB 未命中,从而降低读取速度。
  • 使用大页(例如 2MB)可以显著减少每个连接的页表内存使用量——在测试中,从每个连接约 31MB 降至约 0.5MB——并提高 TLB 覆盖率,将热点工作集保持在缓存中,从而提升吞吐量。
  • ClickHouse Managed Postgres 通过预先保留内存(RAM 的 25%),配置 huge_pages = 'on' 以防止静默回退,并通过测量而非假设来调整 shared_buffers 的大小以适合保留的内存池,从而确保使用大页。
  • 在 EC2 实例上的测试显示,使用 200 个连接时,4KB 页面导致 6.12GB 的页表,而使用 2MB 大页时仅为 111MB;由于减少了转换开销,使用大页时吞吐量提高了 12%。