PostgreSQL逻辑复制运行一段时间后突然停止问题排查求助
PostgreSQL逻辑复制运行20分钟后停止的可能原因
- 复制槽异常:执行
SELECT * FROM pg_replication_slots;查看主库复制槽状态,若active为f,说明复制槽已失效;若restart_lsn与当前WAL位置差距过大,可能是备库消费速度不足,主库WAL被清理后无法继续同步。 - 连接中断未重连:检查备库
pg_log日志,是否存在网络波动、连接超时导致的断开。若primary_conninfo未配置keepalives_idle等保活参数,连接断开后不会自动恢复。 - 表结构不一致:主库若对某张表执行DDL变更(如加字段、改类型),备库未同步该变更时,后续复制操作会触发报错,导致复制进程停止。查看备库日志是否有
column does not exist或type mismatch类错误。 - 复制进程崩溃:检查备库系统日志和PostgreSQL日志,是否存在
walreceiver进程因内存不足被系统杀死(如out of memory条目),或进程崩溃记录(如walreceiver process died)。 - 权限变更:复制用户的
REPLICATION权限或部分表的SELECT权限被意外撤销,导致主库无法读取WAL或表数据,复制中断。 - WAL日志被提前清理:主库
wal_keep_size设置过小,或使用pg_repack等工具清理了WAL,备库需要的日志文件已被删除,无法继续同步。 - 大事务阻塞:主库存在长时间运行的大事务,导致WAL积压,备库持续等待事务提交,表现为复制停止。执行
SELECT * FROM pg_stat_activity WHERE state = 'idle in transaction' AND now() - query_start > interval '10 minutes';排查长事务。
内容的提问来源于stack exchange,提问作者Alisahib Qadimov
相关产品推荐
相关产品推荐

