PostgreSQL 13.2升级至14时报共享内存不足问题求助(Amazon Linux 2)
PostgreSQL升级时报共享内存不足的解决方案
配置生效校验
- 必须同时修改旧版本(13.2)和新版本(14)两个集群
postgresql.conf的对应参数,仅修改单集群配置不会生效 - 修改配置后需重启对应集群,执行
show max_locks_per_transaction;连接到对应集群查询,确认配置已更新 - 升级场景下建议临时将
max_locks_per_transaction调整到1024以上,单库表数量超过5000的场景可调整到20484096,`max_connections`同步调整为日常值的23倍即可,升级完成后可回滚配置 - 升级操作启动前停止所有业务连接、定时任务,避免其他连接占用共享锁资源,执行
SELECT count(*) FROM pg_locks;可查看当前锁占用总量
系统内核参数调整
Amazon Linux 2默认的内核共享内存参数可能限制PostgreSQL的内存申请,即使调整PG配置也会触发内存不足报错
- 执行
sysctl kernel.shmmax kernel.shmall查看当前系统共享内存配置 - 临时调高参数(升级完成后可恢复):
sysctl -w kernel.shmmax=17179869184 sysctl -w kernel.shmall=4194304
- 如需永久生效可将上述参数写入
/etc/sysctl.conf,执行sysctl -p加载配置
规避方案
如果调整后仍报错,可通过以下方式绕过锁上限限制:
- 执行pg_upgrade时添加
-j 1参数关闭并行升级,串行执行任务减少并发锁占用 - 放弃pg_upgrade方案,分批导出导入数据:先导出全库结构,再按schema/表分批导出数据导入新集群
内容的提问来源于stack exchange,提问作者Alan
相关产品推荐
相关产品推荐

