ITPub博客

首页 > 数据库 > 数据库开发技术 > 逻辑复制7大工艺:历经8载的淬炼

逻辑复制7大工艺:历经8载的淬炼

原创 数据库开发技术 作者:象楚之行 时间:2024-04-23 08:10:00 0 删除 编辑

欢迎关注公众号, 持续发布PostgreSQL、openGauas/MogDB等PG系数据库干货文章。

春光微醺逐,夏日踏步至。

逻辑复制历经版本10~13四轮次的清新刚劲,14~16三轮次的细腻收敛,每轮次均蕴含独特的风味和年轮记忆,本文将介绍7个引人入胜的逻辑复制特性。

1.流式传输大事务及并行应用

大事务可能导致插槽增长,这其实可以避免。版本14之前只能在事务提交后进行解码和复制,主要是防止事务可能被中止。14提供了流式传输的功能,无需等待事务提交完成,亦可将解码后的更新传输到订阅端,这有助于减少大事务的回放延迟,带来较大的性能提升。

流式传输的特性通过订阅上设置streaming选项来实现:

ALTER SUBSCRIPTION mysub SET (streaming = on);

此时通过pg_stat_activity可以观察到START_REPLICATION命令使用proto_version为2来消费大事务。

版本16还增加了max_parallel_apply_workers_per_subscription参数控制并行应用大事务来提升性能,此时的proto_version版本号为4。

2.使用二进制格式传输数据

从版本14开始,创建或修改订阅时可设置binary选项以二进制模式传输。binary选项默认值为false,打开binary选项后具有二进制发送和接收函数的数据类型能以二进制格式传输,速度会更快。

ALTER SUBSCRIPTION mysub SET (binary = on);

binary选项在版本16还支持以二进制COPY格式同步表的初始数据。

3.两阶段提交流式传输

从版本15开始,订阅端支持通过two_phase选项启用两阶段提交,示例如下:

CREATE SUBSCRIPTION mysub WITH (two_phase = on);

注意:two_phase选项只能在创建订阅时设置,不能修改,两阶段提交使用的proto_version版本号为3。

4.数据过滤选择:

从版本15开始,创建发布时可以有选择地过滤捕获感兴趣的更改,使用where命令过滤数据行,示例如下:

CREATE PUBLICATION mypub FOR TABLE tab1 WHERE (id > 100 and id <= 1000);

也能过滤部分列,示例如下:

CREATE PUBLICATION mypub FOR TABLE tab1(a,b);

还可以对行列进行组合,示例如下:

CREATE PUBLICATION mypub FOR TABLE tab1(a, b) WHERE (a > 0);

限定指定表、模式、DML、行列值进行服务端过滤,能减少通过网络传输的数据量。

5.调控解码内存

版本13引入了名为logical_decoding_work_mem参数,用于控制逻辑复制连接(walsender)可以使用的解码内存。当工作负载涉及大事务时,默认配置的64MB可能不够,解码过程可能会溢出到磁盘,解码速度会变慢。

关注pg_stat_activity活动视图,如果walsender进程经常出现IO等待事件,在可用内存比较充足的情况下应该考虑调优logicallogical_decoding_work_mem参数,增大该值可以显著提高解码性能。

注意logical_decoding_work_mem参数虽然可以在会话级别进行设置,但并不能直接对单个 walsender进程设置。walsender进程是作为后台进程运行而非用户会话,无法直接对单个walsender进程设置,因此需要调整全局的logical_decoding_work_mem参数值。

6.标识复制源,避免事务回环

版本16之前,某个事务从源节点被复制到目标节点后,又再次被复制回源节点,这就产生了事务回环。在16版本里设置origin选项后,可以区分复制的数据是由用户的SQL语句或流复制本身引起。

创建或修改订阅时可设置origin为none,从而避免陷入事务回环。示例如下:

ALTER SUBSCRIPTION mysub SET (origin = none);

7.从standby解码

版本16还支持从standby节点创建逻辑复制插槽,允许客户端使用standby节点而不是主节点来消费WAL变更,这带来了3个好处:消除主节点复制槽磁盘增长的风险、主节点负载减轻、可防御故障转移。

以上7点展示了逻辑复制的主要特点,除此之外,逻辑复制还拥有一些其他特性,例如非唯一索引可作为复制标识、跳过冲突事务等,这些特性进一步丰富了逻辑复制的功能,使其更为灵活和强大。

本文到此结束,希望大家喜欢这个主题!

原文作者:象楚之行;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2018-06-12

  • 博文量
    102
  • 访问量
    50369