You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开启huge_pages的PostgreSQL数据库SHMMAX/SHMALL内核参数配置问题

关于PostgreSQL配套内核参数的配置解答

一、kernel.shmall的页大小基准

首先明确:kernel.shmall的计数单位是系统默认的常规内存页大小,也就是你通过getconf PAGE_SIZE得到的4096字节,和大页(HugePage)的2MB页大小没有关系,你之前按2MB为基准的配置逻辑是错误的。

二、当前shmall配置的问题

你当前设置kernel.shmall = 4096的话,实际允许的总共享内存大小为:
4096 * 4KB = 16MB
远低于你的PostgreSQL 4GB shared_buffers的需求,会导致PostgreSQL启动时共享内存分配失败,必须调整。

三、各参数最优配置建议

  • kernel.shmall:建议设置为总内存大小除以常规页大小,16GB内存的场景下计算为 16 * 1024 * 1024 KB / 4KB = 4194304,可以直接设为4194304,足够覆盖所有场景的共享内存需求。如果想收紧上限也可以按你设定的kernel.shmmax对应值设置,你的kernel.shmmax = 8GB对应需要至少2097152,留余量的话设300万以上即可。
  • kernel.shmmax:你当前设置的8GB是合理的。该参数为单个共享内存段的最大允许值,只要大于PostgreSQL的shared_buffers大小即可,16GB内存场景下设为总内存的50%~75%都属于合理范围。
  • vm.nr_hugepages:你当前设置的2300是合理的。计算逻辑为shared_buffers大小除以大页大小再加10%左右的余量:4GB / 2MB = 2048,加余量到2300足够使用,从你当前的/proc/meminfo查询结果也能看到大页预留和使用状态正常。
  • PostgreSQL侧huge_page = 'on'配置正确,使用大页可以有效降低TLB缓存命中率损耗,提升数据库内存访问性能。

内容的提问来源于stack exchange,提问作者supersantos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:54:10