温馨提示×

centos中postgresql如何调优

小樊
33
2026-09-27 14:09:19
栏目: 云计算

在 CentOS 上调优 PostgreSQL,通常从系统层面、数据库参数、SQL 与索引、监控四个方面入手。下面给你一份较实用的调优指南(以 CentOS 7/8 + PostgreSQL 12/13/14 为例,其他版本类似)。


一、系统层面调优(CentOS)

1. 内核参数(/etc/sysctl.conf)

# 共享内存
kernel.shmmax = 68719476736
kernel.shmall = 16777216

# 网络
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192

# 文件句柄
fs.file-max = 655360

执行:

sysctl -p

2. 资源限制(/etc/security/limits.conf)

postgres soft nofile 65536
postgres hard nofile 65536
postgres soft nproc 65536
postgres hard nproc 65536

3. 关闭透明大页(THP)

echo never > /sys/kernel/mm/transparent_hugepage/enabled

并写入开机脚本。

4. 磁盘与文件系统

  • 使用 XFS / ext4
  • 挂载选项:
noatime,nodiratime,barrier=0(有UPS时)
  • 建议使用 SSD / NVMe

二、PostgreSQL 核心参数调优

配置文件位置:

/var/lib/pgsql/14/data/postgresql.conf

1. 内存相关(最重要)

shared_buffers = 25% ~ 40% 内存
effective_cache_size = 50% ~ 75% 内存
work_mem = 16MB ~ 64MB(按并发调整)
maintenance_work_mem = 512MB ~ 2GB

示例(32G 内存):

shared_buffers = 8GB
effective_cache_size = 24GB
work_mem = 32MB
maintenance_work_mem = 1GB

2. 写入性能

wal_buffers = 16MB
checkpoint_timeout = 15min
checkpoint_completion_target = 0.9
max_wal_size = 4GB
min_wal_size = 1GB

3. 连接与并发

max_connections = 200 ~ 500
superuser_reserved_connections = 5

⚠️ 高并发建议配合 PgBouncer

4. 并行查询

max_parallel_workers_per_gather = 4
max_parallel_workers = 8
max_parallel_maintenance_workers = 4

三、SQL 与索引优化

1. 查看慢查询

SELECT * FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;

启用:

shared_preload_libraries = 'pg_stat_statements'

2. 常见优化手段

  • 建合适索引(B-tree / 部分索引 / 覆盖索引)
  • 避免 SELECT *
  • 使用 EXPLAIN ANALYZE
  • 大表分区(PARTITION)
  • 定期 VACUUM / ANALYZE

四、日常维护

VACUUM ANALYZE;

或自动:

autovacuum = on
autovacuum_vacuum_scale_factor = 0.1

五、监控工具推荐

  • pg_stat_activity
  • pg_stat_statements
  • pg_top
  • Prometheus + Grafana + postgres_exporter

六、快速检查清单

✅ 内存参数是否合理
✅ 是否启用 pg_stat_statements
✅ 是否有慢 SQL
✅ 是否使用连接池
✅ 是否定期 VACUUM


如果你能提供:

  • PostgreSQL 版本
  • 服务器内存
  • 业务类型(OLTP / 报表 / 混合)

我可以给你一份可直接用的 postgresql.conf 配置。

0 踩