在 CentOS 上提升 PostgreSQL 性能,通常可以从系统层面、PostgreSQL 参数调优、硬件与架构、日常维护几个方面入手。下面按实战优先级给你一个较完整的优化清单。
getenforce
# 若为 Enforcing 且不影响安全策略,可临时关闭
setenforce 0
生产环境建议通过策略放行,而非直接关闭。
# 内存相关
vm.swappiness = 10
vm.overcommit_memory = 2
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
# 网络
net.core.somaxconn = 1024
net.ipv4.tcp_tw_reuse = 1
生效:
sysctl -p
defaults,noatime,nodiratime
配置文件位置(CentOS):
/var/lib/pgsql/<version>/data/postgresql.conf
shared_buffers = 25% 内存
effective_cache_size = 50%–75% 内存
work_mem = 合理值(如 16MB~64MB)
maintenance_work_mem = 512MB~2GB
示例(16GB 内存):
shared_buffers = 4GB
effective_cache_size = 12GB
work_mem = 32MB
maintenance_work_mem = 1GB
wal_buffers = 16MB
checkpoint_timeout = 15min
checkpoint_completion_target = 0.9
synchronous_commit = off # 非金融场景可关
max_connections = 200 # 不要盲目调大
高并发建议配合 PgBouncer 连接池。
CentOS 安装 PgBouncer:
yum install pgbouncer
模式建议:
transaction 模式(Web 应用最常用)EXPLAIN ANALYZE SELECT ...;
SELECT *LIMITVACUUM ANALYZEautovacuum = on
autovacuum_vacuum_scale_factor = 0.1
ANALYZE;
log_min_duration_statement = 1000 # 记录慢SQL
如果你愿意,可以告诉我:
我可以给你一套针对性参数模板。