postgres 批量插入如何影响 Debezium?

问题描述 投票:0回答:1

我们有一个带有多个数据库(A、B、C、D 等)的 Postgres 实例。

我们仅在 db A 上设置 Debezium cdc。但我们还需要批量插入数百万行到其他数据库,例如 B...

看来debezium cdc还需要扫描B的WAL并过滤掉事件。所以批量插入可能会减慢或阻止 debezium..我是对的吗?

如何避免此类阻塞或缓慢?当牛市插入时我们是否应该暂时停止 Debezium 连接?或者有什么办法可以跳过扫描数据库B的WAL吗?

谢谢

postgresql bulkinsert debezium
1个回答
0
投票

我们不能跳过扫描或读取数据库B的WAL。 Walsender 必须读取所有事务,以便他知道数据库之间共享目录的更改,以维护正确的快照。在 postgres 逻辑解码中,有三个主要内容:-

1.阅读沃尔。

2.将更改排队到重新排序缓冲区。

3.事务提交时解码 reorderbuffer 中的更改。

数据库A的walsender只会读取数据库B的更改,但他不会将B的更改放入reorderbuffer中。

下面是插入情况下源代码中的检查/过滤 https://github.com/postgres/postgres/blob/65db0cfb4c036b14520a22dba5a858185b713643/src/backend/replication/逻辑/decode.c#L913

© www.soinside.com 2019 - 2024. All rights reserved.