问题:
您正在Fivetran UI中遇到“XMIN被冻结”警报,或者是Fivetran日志连接器提取的消息数据。这是由于PostgreSQL内部的真空进程造成的,因为从上次成功的同步已经过去了太长时间。
环境:
PostgreSQL
答:
以下两种情况都可能导致冻结:
- 你的autovacuum_freeze_max_age太低:
PostgreSQL的事务控制机制为数据库中被修改的每一行分配一个事务ID。这些id控制该行对其他并发事务的可见性。
当表中任何行中最老的事务ID的年龄超过为'autovacuum_freeze_max_age'设置的值(默认值是2亿个事务)时,就会在表上运行autovacuum,以回收旧事务ID并防止重叠数据丢失。
- 有人对受影响的桌子进行了“真空冷冻”:
冻结所有页面的事务ID(不管它们是否被修改)意味着所有当前行将被归类为旧行,而所有新事务。
冻结标志着表不需要任何自动真空维护。下一次同步将解除冻结。
- 您有非常高的事务率(数据库中的数据量很大)
XMIN用作识别更改行的基础。当XMIN被冻结时,增量同步无法完成。因此,已经在受影响的表上启动了完全的重新同步。
先发制人地解决这个问题的最佳方法是从XMIN切换到逻辑复制作为主要的增量更新机制。如果您决定切换,这将触发连接器的重新同步。
或者,你可以尝试在你的服务器配置中增加'autovacuum_freeze_max_age'的值,避免运行' VACUUM FREEZE '。
还有第三种选择(取决于你在哪个定价层),你可以增加同步频率.这与为'autovacuum_freeze_max_age'设置一个更高的值具有相同的效果。