温馨提示×

centos怎样提升postgresql性能

小樊
35
2026-10-03 10:47:45
栏目: 云计算

在 CentOS 上提升 PostgreSQL 性能,通常可以从系统层面、PostgreSQL 参数调优、硬件与架构、日常维护几个方面入手。下面按实战优先级给你一个较完整的优化清单。


一、系统层面优化(CentOS)

1. 关闭或调整 SELinux(视情况)

getenforce
# 若为 Enforcing 且不影响安全策略,可临时关闭
setenforce 0

生产环境建议通过策略放行,而非直接关闭。

2. 调整内核参数(/etc/sysctl.conf)

# 内存相关
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

3. 文件系统与磁盘

  • 使用 XFS(CentOS 默认且适合 PG)
  • 挂载选项建议:
defaults,noatime,nodiratime
  • 磁盘尽量使用 SSD / NVMe
  • WAL 与数据目录分离(强烈推荐)

二、PostgreSQL 核心参数调优

配置文件位置(CentOS):

/var/lib/pgsql/<version>/data/postgresql.conf

1. 内存相关(最重要)

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

2. WAL 与写入性能

wal_buffers = 16MB
checkpoint_timeout = 15min
checkpoint_completion_target = 0.9
synchronous_commit = off   # 非金融场景可关

3. 并发与连接

max_connections = 200  # 不要盲目调大

高并发建议配合 PgBouncer 连接池。


三、使用连接池(非常重要)

CentOS 安装 PgBouncer:

yum install pgbouncer

模式建议:

  • transaction 模式(Web 应用最常用)

四、SQL 与索引优化

1. 使用执行计划

EXPLAIN ANALYZE SELECT ...;

2. 常见优化手段

  • 合理建立 B-tree / 复合索引
  • 避免 SELECT *
  • 大表加 LIMIT
  • 定期 VACUUM ANALYZE

五、日常维护

1. 自动清理

autovacuum = on
autovacuum_vacuum_scale_factor = 0.1

2. 统计信息

ANALYZE;

3. 日志分析

log_min_duration_statement = 1000  # 记录慢SQL

六、架构级优化(进阶)

  • 读写分离(主从复制)
  • 分区表(大表)
  • 冷热数据分离
  • 使用连接池 + 缓存(Redis)

七、快速检查清单 ✅

  • [ ] shared_buffers 已调整
  • [ ] WAL 与数据分盘
  • [ ] 使用 PgBouncer
  • [ ] 慢 SQL 已分析
  • [ ] autovacuum 正常

如果你愿意,可以告诉我:

  • CentOS 版本
  • PostgreSQL 版本
  • 内存 / CPU / 磁盘类型
  • 主要业务场景(OLTP / 报表 / 写入密集)

我可以给你一套针对性参数模板。

0 踩