面试题答案
一键面试- 网络问题:
- 网络连接不稳定或中断:主库与订阅端之间的网络连接可能出现波动、丢包甚至完全中断的情况。可以使用
ping
命令检查网络连通性,使用traceroute
查看路由路径是否正常。 - 防火墙设置:防火墙可能阻止了PostgreSQL逻辑复制所需的端口通信。确保主库和订阅端之间允许PostgreSQL使用的端口(默认5432)进行通信。
- 网络连接不稳定或中断:主库与订阅端之间的网络连接可能出现波动、丢包甚至完全中断的情况。可以使用
- 主库问题:
- 事务积压:主库上有大量未提交的事务,这些事务会阻塞逻辑复制槽的推进,导致订阅端无法获取新的变更数据。可以查询
pg_stat_activity
视图查看长时间运行的事务。 - 复制槽相关问题:
- 复制槽已满:如果复制槽的容量设置过小,可能会导致数据无法继续写入。可以通过
pg_replication_slots
视图查看复制槽的状态和使用情况。 - 复制槽损坏:复制槽可能由于某些异常情况(如数据库崩溃后恢复不完全等)而损坏。可以尝试删除并重新创建复制槽,但要谨慎操作,因为可能会丢失部分数据。
- 复制槽已满:如果复制槽的容量设置过小,可能会导致数据无法继续写入。可以通过
- 事务积压:主库上有大量未提交的事务,这些事务会阻塞逻辑复制槽的推进,导致订阅端无法获取新的变更数据。可以查询
- 订阅端问题:
- 订阅状态异常:检查订阅的状态是否正常。可以使用
pg_subscription
视图查看订阅的详细信息,例如substate
字段,若状态不是active
,则可能存在问题。可以尝试重新启动订阅(使用ALTER SUBSCRIPTION... RESUME
命令)。 - 本地冲突:订阅端可能存在与复制数据的本地冲突,例如表结构不一致(如订阅端表的列数、数据类型与主库不匹配)。需要仔细检查表结构,确保主库和订阅端表结构一致。
- 资源不足:订阅端服务器可能资源不足(如CPU、内存、磁盘空间等)。可以使用系统工具(如
top
查看CPU和内存使用,df -h
查看磁盘空间)检查资源情况。如果资源不足,可能会导致复制数据的处理速度变慢甚至停滞。
- 订阅状态异常:检查订阅的状态是否正常。可以使用
- 配置问题:
- 参数设置不当:
- wal_level:主库的
wal_level
参数需要设置为logical
才能支持逻辑复制。若设置不正确,逻辑复制将无法正常工作。 - max_replication_slots:主库的
max_replication_slots
参数需要足够大,以容纳所有的逻辑复制槽。如果设置过小,可能无法创建新的复制槽。 - max_wal_senders:主库的
max_wal_senders
参数需要足够大,以支持向订阅端发送WAL数据。若设置过小,可能导致部分订阅端无法获取数据。
- wal_level:主库的
- 参数设置不当: