title: Set Appropriate Connection Limits
impact: CRITICAL
impactDescription: Prevent database crashes and memory exhaustion
tags: connections, max-connections, limits, stability
设置适当的连接数限制
连接过多会耗尽内存并降低性能。应根据可用资源设置限制。
错误做法(无限制或连接数过高):
-- 默认 max_connections = 100,但常常被盲目调高showmax_connections;-- 500(对于 4GB 内存来说太高了)-- 每个连接占用 1-3MB 内存-- 500 个连接 * 2MB = 仅连接就占用 1GB!-- 高负载下出现内存不足错误正确做法(根据资源计算):
-- 公式:max_connections = (内存 MB / 每个连接 5MB) - 预留-- 对于 4GB 内存:(4096 / 5) - 10 = 约 800 理论上限-- 但实际中,100-200 对查询性能更有利-- 4GB 内存的推荐设置altersystemsetmax_connections=100;-- 同时合理设置 work_mem-- work_mem * max_connections 不应超过内存的 25%altersystemsetwork_mem='8MB';-- 8MB * 100 = 最多 800MB监控连接使用情况:
selectcount(*),statefrompg_stat_activitygroupbystate;参考:数据库连接