我正在尝试使用逻辑复制(发布/订阅)将大型 (4TB) Postgresql 数据库从 AWS RDS 移动到 Azure Database for Postgresql Flexible Server。我正在按表逐步执行复制,并逐个同步较大的表以减少主服务器上的 WAL 开销。在同步较大的 (>10GB) 表时,我遇到了挂起和长时间等待。
从同步和更新订阅开始,当我向发布中添加新表并更新订阅时,我看到网络流量和磁盘使用率立即飙升(订阅者的写入吞吐量为 100MB/s)。大约半小时后,流量几乎停止(1MB/s 或更低)。在 1 到 12 小时的某个可变时间段后,流量突然再次增加。此过程重复,直到同步最终完成并且表是最新的。
我检查了双方的数据库日志,没有看到任何错误消息,甚至没有看到与复制过程相关的信息。是什么原因导致这些长时间挂起?我可以做进一步的诊断来找出原因吗?
在查看源数据库和目标数据库等待情况后,发现这是用于公开源数据库的代理设备导致的。代理虚拟机是一个
t3.nano
可突发实例。通过增加代理虚拟机的大小,可以消除瓶颈并加快数据传输速度,而不会出现明显的速度减慢。