我们有一个具有多个数据库(A、B、C、D等)的postgres实例. 我们在数据库A ONLY上设置了debezium CDC.但我们还需要向其他数据库(如B)批量插入数百万行.似乎debezium CDC仍然需要扫描B的WAL并过滤掉事件,所以批量插入可能会减慢或阻止debezium,对吗?
如何避免这种堵塞或缓慢?当大容量插入时,我们应该暂时停止debezium连接吗?或者有什么方法可以跳过扫描数据库B的WAL吗?
谢谢
我们有一个具有多个数据库(A、B、C、D等)的postgres实例. 我们在数据库A ONLY上设置了debezium CDC.但我们还需要向其他数据库(如B)批量插入数百万行.似乎debezium CDC仍然需要扫描B的WAL并过滤掉事件,所以批量插入可能会减慢或阻止debezium,对吗?
如何避免这种堵塞或缓慢?当大容量插入时,我们应该暂时停止debezium连接吗?或者有什么方法可以跳过扫描数据库B的WAL吗?
谢谢
我们不能跳过扫描或读取数据库B的WAL.Walsender必须阅读所有事务,这样他才能知道数据库之间共享目录的变化,这是维护正确快照所必需的.在Postgres逻辑解码中,有三件主要事情:
1.读《华尔街日报》.
2.将更改排队到reorderBuffer.
3.对事务发起时来自reorderBuffer的更改进行解码.
数据库A的Walsender将只读取数据库B的更改,但不会将B的更改放入reorderBuffer.
以下是源代码中针对插入的判断/筛选 https://github.com/postgres/postgres/blob/65db0cfb4c036b14520a22dba5a858185b713643/src/backend/replication/logical/decode.c#L913个
当逻辑解码正在进行时,如果您向Postgres并行插入数百万行,解码速率将会降低,因此您可以看到速度很慢.