在 CentOS 上调优 PostgreSQL,通常分为 系统层参数、PostgreSQL 配置文件参数、资源限制 和 监控验证 四部分。下面按实战步骤说明。
CentOS 上常见路径:
/var/lib/pgsql/<version>/data/postgresql.conf
/var/lib/pgsql/<version>/data/pg_hba.conf
编辑配置:
vi /var/lib/pgsql/15/data/postgresql.conf
修改后重启或 reload:
systemctl reload postgresql-15
# 或
systemctl restart postgresql-15
PostgreSQL 不推荐 THP:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效:
vi /etc/rc.d/rc.local
# 添加上面两行
chmod +x /etc/rc.d/rc.local
# 共享内存
kernel.shmmax = 17179869184
kernel.shmall = 4194304
# 网络
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
# 文件句柄
fs.file-max = 655360
生效:
sysctl -p
shared_buffers = 4GB # 物理内存的 25%
work_mem = 64MB # 复杂查询可提升
maintenance_work_mem = 1GB # VACUUM / INDEX
effective_cache_size = 12GB # 物理内存的 50%-75%
max_connections = 500
superuser_reserved_connections = 10
wal_buffers = 16MB
checkpoint_timeout = 15min
checkpoint_completion_target = 0.9
synchronous_commit = off # 非强一致场景
random_page_cost = 1.1
effective_io_concurrency = 200
default_statistics_target = 100
vi /etc/security/limits.conf
postgres soft nofile 65536
postgres hard nofile 65536
postgres soft nproc 65536
yum install -y epel-release
yum install -y pgtune
或在线: https://pgtune.leopard.in.ua/
SHOW shared_buffers;
SHOW max_connections;
yum install -y pg_top
pg_top
或:
SELECT * FROM pg_stat_activity;
SELECT * FROM pg_stat_statements;
| 场景 | 建议 |
|---|---|
| 读多写少 | 提高 shared_buffers |
| 写密集 | 降低 checkpoint 频率 |
| 高并发 | 控制 max_connections + 连接池 |
如果你能提供:
我可以给你一套 可直接用的 postgresql.conf 配置。