在2核2G的服务器上部署PostgreSQL,需要针对有限资源进行优化。以下是关键参数的优化建议:
一、核心内存参数优化
# 共享缓冲区 (通常设为内存的25%)
shared_buffers = 512MB # 2GB内存的25%
# 工作内存 (每个查询可用的内存)
work_mem = 8-16MB # 根据并发查询调整
# 维护工作内存
maintenance_work_mem = 128MB
# 最大连接数 (根据应用需求调整)
max_connections = 50-80 # 2核2G建议50-80
二、WAL和检查点优化
# WAL缓冲区
wal_buffers = 16MB
# 检查点相关
checkpoint_completion_target = 0.9
checkpoint_timeout = 10min
max_wal_size = 1GB
min_wal_size = 80MB
三、查询优化和资源限制
# 避免内存溢出
effective_cache_size = 1GB # 操作系统缓存估计值
# 并行查询设置 (2核服务器)
max_worker_processes = 2
max_parallel_workers_per_gather = 1
max_parallel_workers = 2
四、连接和超时设置
# 连接管理
idle_in_transaction_session_timeout = 10min
# 锁管理
deadlock_timeout = 1s
五、文件系统优化建议
- 数据目录分离:如果可能,将数据目录放在单独的磁盘/分区
- 文件系统:使用XFS或ext4,禁用atime
- 预读设置:调整合适的预读值
六、监控和调整建议
-
监控工具:
- 使用
pg_stat_statements监控查询性能 - 定期检查
pg_stat_bgwriter和pg_stat_database
- 使用
-
根据实际负载调整:
- 观察
shared_buffers命中率 - 监控连接数使用情况
- 检查WAL生成速率
- 观察
七、Docker部署额外优化
如果使用Docker镜像部署:
# 设置合适的ulimits
--ulimit nofile=65536:65536
--ulimit nproc=65536:65536
# 内存限制
-m 2g --memory-swap=2g
# CPU限制
--cpus=2
八、配置文件示例
# postgresql.conf 精简优化版
shared_buffers = 512MB
work_mem = 16MB
maintenance_work_mem = 128MB
effective_cache_size = 1GB
max_connections = 60
wal_buffers = 16MB
checkpoint_completion_target = 0.9
max_wal_size = 1GB
min_wal_size = 80MB
max_worker_processes = 2
max_parallel_workers_per_gather = 1
max_parallel_workers = 2
random_page_cost = 1.1
effective_io_concurrency = 200
注意事项
- 逐步调整:每次只修改1-2个参数,观察效果
- 备份配置:修改前备份原始配置文件
- 负载测试:使用实际业务负载测试优化效果
- 监控报警:设置关键指标监控(连接数、内存使用等)
这些优化旨在平衡性能和资源使用,具体数值可能需要根据实际应用负载进行微调。
CLOUD技术笔记