Debian 上 PostgreSQL 内存配置建议
一 核心原则
二 关键内存参数与常见取值
| 参数 | 作用 | 建议范围 | Debian 配置要点 |
|---|---|---|---|
| shared_buffers | 共享缓存,存放表/索引页 | 物理内存的25%–30%(通用);若总内存≥8GB可到32%–40% | 修改后需重启;Debian 配置文件路径通常为:/etc/postgresql/<版本>/main/postgresql.conf |
| effective_cache_size | 成本估计用的“可用缓存”假设值(不占用内存) | 物理内存的50%–75% | 仅影响执行计划选择 |
| work_mem | 排序/哈希等每个操作可用内存 | 通用4MB起步;可按并发估算:(总内存 − shared_buffers) / (max_connections × 2);OLTP 常用2MB,OLAP 可更高 | 并发高时不宜过大,避免总内存被耗尽 |
| maintenance_work_mem | VACUUM/CREATE INDEX 等维护操作内存 | 物理内存的5%–10%,或1/16(上限约2GB) | 大表维护前可临时调大 |
| wal_buffers | WAL 日志写缓存 | 一般16MB;或设为 shared_buffers 的约 1/32 | 默认 -1 为自动,多数场景无需改 |
| temp_buffers | 会话级临时表/临时页 | 默认8MB;会话中可按需调大 | 仅在确有大临时表访问时调整 |
| huge_pages | 大页支持 | 内存>64GB且 OS 支持时可设为 on | 需系统预先配置大页;Debian 上可用 try/on/off |
| 上述范围与用法为社区常用实践,适用于 Debian 上的 PostgreSQL 部署。 |
三 不同内存规模的起步配置示例
| 总内存 | shared_buffers | effective_cache_size | work_mem(按并发估算) | maintenance_work_mem |
|---|---|---|---|---|
| 2GB | 512MB | 1.5GB | 2MB(若并发≈100,上限≈400MB) | 128MB |
| 8GB | 2GB | 6GB | 4MB(若并发≈100,上限≈800MB) | 512MB |
| 32GB | 8GB | 24GB | 8MB(若并发≈200,上限≈3.2GB) | 2GB |
| 64GB | 16GB | 48GB | 16MB(若并发≈200,上限≈6.4GB) | 2GB–4GB |
| 并发更高时,优先通过连接池(如 PgBouncer)降低 max_connections,再相应上调 work_mem,以避免总内存被“连接数 × work_mem”撑爆。 |
四 调优步骤与注意事项