在 Debian 上优化 PostgreSQL,通常可以从系统层面、PostgreSQL 配置、表结构与 SQL、维护与监控几个方面入手。下面给你一份比较实用、可落地的优化清单。
/dev/sdb1 /var/lib/postgresql xfs defaults,noatime 0 0
noatime 可减少磁盘写操作编辑 /etc/sysctl.conf:
# 共享内存
kernel.shmmax = 68719476736
kernel.shmall = 16777216
# 网络
net.core.somaxconn = 1024
net.ipv4.tcp_max_syn_backlog = 4096
# 交换
vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
执行:
sysctl -p
echo never > /sys/kernel/mm/transparent_hugepage/enabled
并在 /etc/rc.local 中持久化。
配置文件位置(Debian):
/etc/postgresql/<version>/main/postgresql.conf
shared_buffers = 25% ~ 40% 物理内存
work_mem = 16MB ~ 64MB(并发高时别太大)
maintenance_work_mem = 512MB ~ 2GB
effective_cache_size = 50% ~ 75% 物理内存
示例(16GB 内存):
shared_buffers = 4GB
effective_cache_size = 12GB
work_mem = 32MB
maintenance_work_mem = 1GB
max_connections = 100 ~ 300
⚠️ 不要盲目调大,推荐配合 PgBouncer 使用连接池。
wal_buffers = 16MB
checkpoint_timeout = 15min
checkpoint_completion_target = 0.9
logging_collector = on
log_min_duration_statement = 500ms
log_line_prefix = '%m %p %u %d %a '
修改后重启:
systemctl restart postgresql
Debian 安装 PgBouncer:
apt install pgbouncer
模式推荐:
transaction 模式(大多数 Web 应用)查看慢查询:
SELECT * FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;
(需开启 pg_stat_statements 扩展)
EXPLAIN ANALYZESELECT *BRIN 索引处理时序数据VACUUM ANALYZE;
或配置 autovacuum(默认开启,可调优):
autovacuum_vacuum_scale_factor = 0.1
autovacuum_analyze_scale_factor = 0.05
pg_stat_statementspg_top✅ 内存配置合理
✅ 使用连接池
✅ 索引优化 + 慢查询分析
✅ SSD + 正确挂载
✅ 定期 VACUUM / ANALYZE
✅ 日志开启慢 SQL
如果你愿意,可以告诉我:
我可以直接帮你给出一份可复制的 postgresql.conf 配置。