主库或备库存在断开的复制槽 解决方法之一 9.6引入了old_snapshot_threshold参数,表示快照超过多长时间后,vacuum就可以删除其保留的dead tuple。单位是分钟,默认为-1,表示禁止该特性。这样可以避免表膨胀,但是长事务读取被删除tuple时会报错,snapshot too old 参考资料 Postgresql的表膨胀及对策 ...
虽然设置参数old_snapshot_threshold可以解决垃圾无法回收问题,那只对于持有xmin的快照事务,而持有xid的事务这个参数是不生效的。 开启快照过旧,对性能有影响。 因为每次获取快照都要更新SNAPSHOT TOO OLD需要用到的数据结构列表。同时get buffer page时,每次都要判断,是否满足快照过旧。