PostgreSQL 的高并发稳定运行依赖于底层操作系统的核心内核参数配置:
用于维护核心的共享缓冲区池(shared_buffers)、WAL 缓冲区以及锁表。现代系统通常使用 POSIX 共享内存或 mmap 匿名映射。
单个进程所能同时打开的最大文件句柄数由 ulimit -n 约束。在高并发多表访问场景下,应当调大句柄数上限至数万以上。
在 Linux 生产宿主机上,应当将内核参数 vm.overcommit_memory 设为 2(或合理规划 swap 交换空间),严密防范系统在内存吃紧时触发 OOM Killer 杀手进程将正在活跃运行的数据库后台服务强行杀死。
在老式 Unix 系统或特定容器环境中,系统内核对 System V 共享内存段和信号量总数设有硬性上限。
Table 18.1. System V IPC 核心内核参数
| 内核参数 | 说明 |
|---|---|
| SHMMAX | 单个共享内存段的最大尺寸 |
| SHMALL | 系统分配的共享内存页总数上限 |
| SEMMNI | 系统信号量标识符最大数量 |
在基于 systemd 的 Linux 发行版中,必须确保 RemoveIPC=no,以防止在外部运维会话注销时由 systemd 误杀数据库的共享内存段。
操作系统通过 ulimit 控制每个进程的最大打开文件描述符数(nofile)与最大进程数(nproc)。生产环境应将文件句柄上限调整至 65535 以上。
在 Linux 上,默认开启的内存过度分配(Overcommit)可能在物理内存紧缺时由 OOM Killer 误杀 PostgreSQL 后台关键进程。推荐设置 vm.overcommit_memory = 2 或调整数据库主进程的 OOM Score 优先级以保护实例稳定。
启用 Linux Huge Pages(大页)能够显著降低 CPU 页表缓存(TLB)的未命中率,降低巨型共享缓冲区(shared_buffers)的访问延迟,大幅提升大并发场景下的吞吐性能。