逻辑解码快照

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

我理解快照包含有关当前正在运行、已提交和未提交事务的数据库的当前状态。

我有几个问题

1.快照如何用于逻辑解码?

2.我发现SnapBuid结构中有不同的状态,如SNAPBUILD_CONSISTENT、SNAPBUILD_FULL_SNAPSHOT、SNAPBUILD_BUILDING_SNAPSHOT、SNAPBUILD_START这个值是什么?为什么维护它们以及如何使用它们?

3.我还发现Walsender进程会将快照存储在pg_logic/snapshots/目录中,有什么必要这样做呢?

4.如果目录修改事务,该快照如何更新?

postgresql replication logical-replication pglogical
1个回答
0
投票

查看源代码后,我找到了上述问题的答案。

1.在解码wal数据时,walsender进程将在解码上下文中维护一致的解码快照,这有助于收集需要重播的更改。如果快照不一致,他将不会收集更改,但他会等到他到达一致状态。

2.当逻辑复制启动时,walsender进程将读取wal内容并使用SnapBuild结构更新快照的状态。它有从SNAPBUILD_START到SNAPBUILD_CONSISTENT的四种不同状态。 简要信息位于以下链接中:- https://github.com/postgres/postgres/blob/011d60c4352c5c48c0f1a185e8a12833c22a58db/src/backend/replication/逻辑/snapbuild.c#L63

3.如果重新启动或创建任何新槽,存储在 pg_ological/snapshots/ 中的快照将有助于快速过渡到 CONSISTENT 状态。

4.此快照将维护一个名为 xip 的列表,该列表是目录修改事务的 xid 的集合,因此当提交目录修改事务时,其事务 id 会添加到此列表中,并且快照的 xmax 值也会更新。

总的来说,我们可以得出结论,当创建一个插槽时,他将创建一个内存中的目录解码快照,该快照跟踪所有目录修改事务,并基于该快照,间接更新插槽的catalog_xmin值,并且该快照保护通过复制槽机制获取交易所需的目录。

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