暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

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

原创 多米爸比 2024-04-24
887

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

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

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

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

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

ALTER SUBSCRIPTION mysub SET (streaming = on);
复制

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

ALTER SUBSCRIPTION mysub SET (streaming = parallel);
复制

streaming选项在版本16还增加了parallel值,可不写临时文件,直接通过workers进行回放应用。

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

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

最后修改时间:2024-05-25 16:11:05
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

seagull
暂无图片
关注
暂无图片
获得了55次点赞
暂无图片
内容获得29次评论
暂无图片
获得了46次收藏
目录
  • 1.流式传输大事务及并行应用
  • 2.使用二进制格式传输数据
  • 3.两阶段提交流式传输
  • 4.数据过滤选择:
  • 5.调控解码内存
  • 6.标识复制来源,避免事务回环
  • 7.从standby解码