Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >How to Optimize PostgreSQL Logical Replication

How to Optimize PostgreSQL Logical Replication

作者头像
yzsDBA
发布于 2020-10-28 01:32:58
发布于 2020-10-28 01:32:58
9120
举报

How to Optimize PostgreSQL Logical Replication

逻辑复制(Logical Replication)或Pglogical是表级别的复制。两者都是基于WAL的复制机制,允许在两个实例之间复制指定表的WAL。这两个看起来让人迷惑,到底有什么区别呢?Logical Replication是PostgreSQL10.0引入的内置新特性,而pglogical则是一个插件。PG10版本之前可以使用该插件进行逻辑复制,通过持续发展,pglogical的所有特性都集成到了Logical Replication中。换句话说,pglogical插件变成了Logical Replication。Logical Replication最基本的优势在于不用安装任何插件,安装插件受限的环境中,可以推荐使用该逻辑复制。

本博客关注优化Logical Replication。这意味着,优化方法可以同时应用于pglogical以及Logical Replication。

作为DBA,这种复制机制和其他基于触发器的复制机制来说更加可靠,性能更改。逻辑复制的表,发生变化的数据通过WAL记录可以实时复制,这样更加高效并且也没那么复杂。所有其他复制机制都是基于触发器的,这可能会带来性能和维护方面的调整,随着逻辑复制的出现,对基于触发器复制的依赖几乎消失了。

其他博客详细描述了如何配置逻辑复制:

https://severalnines.com/blog/overview-logical-replication-postgresql。

本博客关注如何优化。

优化逻辑复制

首先,Logical Replication的行为和流复制非常像,唯一不同的是流复制对整个database进行复制,而Logical Replication仅复制指定的表。使用逻辑复制时,需要预见一些挑战。

下面我们看下影响逻辑复制的因素。

影响逻辑复制性能的因素

优化逻辑复制时保证无缝复制不会中断非常重要,在搭建前需要注意几个问题:

1)复制表中数据类型

2)复制表或者部分复制表上写事务的频繁性

3)基础设施的容量

4)参数的配置必须最优

以上因素对逻辑复制有较大影响,下面我们详细说明。

逻辑复制数据类型

理解逻辑复制表的数据类型非常重要。如果表存储的是large text或二进制对象,并且又遇到大规模事务,那么由于基础设施资源的限制,复制就会被拖慢。基础设施的容量必须满足处理如此规模的数据。

复制表的活跃性

在复制非常活跃的表时,可能由于IO性能问题、死锁等导致复制落后于同步。这肯能使数据库看起来不太健康。如果需要复制的表比较多并且数据需要复制到多个阶段,那么可能需要很高的CPU使用率,并需要更过的CPU。

基础设施的容量

当使用逻辑复制时,首先需要考虑基础设置的容量。如果需要复制大量表,那么需要充足的CPU。

当需要复制大量表时,可以进行分组并使用并行复制。此时也需要多个CPU用于并行复制。如果数据变化比较频繁,也会影响复制的性能。

优化配置参数

使用逻辑复制功能,需要调优配置参数:

wal_level=’logical’

max_wal_senders=10 # greater than number of subscribers (or replicas)

max_replication_slots=10 # greater than number of subscribers (or replicas)

max_worker_processes=10 # greater than number of subscribers (or replicas)

max_logical_replication_workers # greater than number of subscribers (or replicas)

max_sync_workers_per_subscription # depends on number of tables being replicated

max_wal_senders

max_wal_senders配置值需要大于备机个数。如果数据需要复制到多个节点,那么max_wal_senders就开始起作用,因此这个参数调整到最优很重要。

max_replication_slots

通常,数据的变化会写入到WAL文件中,被称为WAL记录。WAL sender进程会将这些WAL日志发送到备机,备机的wal receiver进程接收这些WAL,然后订阅节点回放这些WAL。

Checkpoint后,可以将pg_xlog/pg_wal中不需要的wal文件删除。如果这些WAL没有在订阅节点回放完时,将这些主机上的文件删除,那么复制就会中断。提供复制槽,可以确保当订阅节点还需要时,主机上的文件不被删除。建议对于每个订阅节点都配置一个复制槽。

max_worker_processes

配置最优的worker进程数也很重要。这依赖于服务最大能够拥有多少进程。在多CPU的环境中才会有效。max_worker_processes通过使用多个CPU核,促使进程以更快的方式完成任务。当使用逻辑复制时,这个参数可以帮助worker进程复制更快。还有一个max_logical_worker_processes参数,指定使用多少worker进程复制数据。

max_logical_worker_processes

这个参数指定最多需要多少logical worker进程复制数据。max_logical_worker_processes的进程隶属于max_worker_processes,比max_worker_processes小。多CPU的环境,复制到多个订阅节点,这个参数才有意义。默认值是4,最大值依赖于系统支持最多worker进程数。

max_sync_workers_per_subscription

这个参数指定每个订阅最多需要多少同步进程。初始数据同步期间,同步进程开始工作,使用整个从那时候可以确保同步更快。目前,一个表只能配置一个同步进程,这意味着多个表可以并行同步。默认值是2,这个值隶属于max_logical_worker_processes。

其他参数包括:wal_receiver_timeout, wal_receiver_status_interval and wal_retrieve_retry_interval,当然这几个参数不会影响发布节点。

结论

在复杂的大规模数据库系统中,复制指定表是常见的需求。逻辑复制可以用于业务报告和数据仓库。作为一个DBA,我认为由于逻辑复制部署简单,非常适合这样的场景。配置调优逻辑复制,需要大量的计划、架构、测试。为了确保复制系统的有效性和可用性,使用逻辑复制时需要评估实时复制的数据量。综上所述,PG10及其之后的版本可以使用逻辑复制,而之前的版本可以使用pglogical。

原文

https://severalnines.com/blog/how-optimize-postgresql-logical-replication

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yanzongshuaiDBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux系统之ipcalc命令的基本使用
ipcalc命令只能计算给定IP地址的网络地址和广播地址,如果要进行更复杂的网络计算,可能需要使用其他工具或编程语言。
江湖有缘
2024/04/10
3960
Linux系统之ipcalc命令的基本使用
Linux 命令(220)—— ipcalc 命令
ipcalc 提供了一个计算主机 IP 信息的简单方法。各种选项指定 ipcalc 应该在标准输出中显示什么信息。可以指定多个选项。必须始终指定要操作的 IP 地址。大多数操作还需要一个网络掩码或 CIDR(Classless Inter-Domain Routing) 前缀。
恋喵大鲤鱼
2022/12/20
5960
IP地址处理模块IPy(Python)
在IP地址规划中,涉及到计算大量的IP地址,包括网段、网络掩码、广播地址、子网数、IP类型等,别担心,Ipy模块拯救你。Ipy模块可以很好的辅助我们高效的完成IP的规划工作。
子润先生
2021/07/12
1.5K0
通过DHCP动态管理IP地址
DHCP 动态主机配置协议是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址、子网掩码、网关以及DNS等tcp/ip信息,给用户或者内部网络管理员作为对所有计算机作中央管理的方法.
王 瑞
2022/12/28
1.8K0
通过DHCP动态管理IP地址
基于Linux下限制指定用户或IP地址通过SSH登录(访问控制)
同时设置上述两个文件时,hosts.allow文件中规则的优先级更高,参考上述两个文件进行设置时,服务器只允许192.168.2.130这个IP地址以及192.168.3.0/24这个IP地址段通过SSH进行登录,其他的IP都会被拒绝SSH登录。
非著名运维
2022/06/22
6.9K0
Centos7基础之配置静态IP地址
手动修改配置文件 ,设置对应网口的 IP 等信息。配置文件路径/etc/sysconfig/network-scripts/* 手动修改配置文件 ,设置对应网口的 IP 等信息。配置文件路径 /etc/sysconfig/network-scripts/* 最小设置示例 文件名对应网口名,CentOS 8 默认配置文件 [Linux]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" BROADCA
入门笔记
2022/06/02
4.1K0
Linux网络配置和管理
在CentOS中,系统网络设备的配置文件保存在“/etc/sysconfig/network-scripts”目录下,ifcfg-eth0包含第一块网卡的配置信息,ifcfg-eth1包含第二块网卡的配置信息。
职场亮哥
2020/10/10
1.5K0
搞它!!!linux网络服务基本设置命令合集
Destination 网段 Gateway 网关 Genmask 子网掩码 metric 度量值
不吃小白菜
2020/09/03
1.3K0
Linux 网络基础(CentOS7)
IP(Internet Protocol)地址是IP协议提供的一种统一的地址格式,IP地址由32个二进制位表示并且每8个二进制位为一组,其范围为00000000.00000000.00000000.00000000~11111111.11111111.11111111.11111111,用十进制的整数表示为0.0.0.0~255.255.255.255。
用户5807183
2019/08/19
1.1K0
Linux 网络基础(CentOS7)
企业实战(13)LVS负载均衡DR(直接路由)模式实战详解(二)
 DNS 实现负载均衡是最基础简单的方式。一个域名通过 DNS 解析到多个 IP,每个 IP 对应不同的服务器实例,这样就完成了流量的调度,虽然没有使用常规的负载均衡器,但也的确完成了简单负载均衡的功能。
非著名运维
2022/06/22
8920
企业实战(13)LVS负载均衡DR(直接路由)模式实战详解(二)
linux系统单网卡绑定多个IP地址
1、linux的网络设备的存储路径是/etc/sysconfig/network-scripts进入目录:
Laikee
2022/04/25
8.8K0
CentOS 6.5系统下构建DHCP服务器
一台Linux server,一台Linux client 要求动态获取ip,一台Win7 client 要求固定IP
星哥玩云
2022/07/01
1.5K0
Linux 设置固定IP地址
当我们安装完linux之后需要做的第一件事就是配置网络,因为有了网络我们可以做更多的事,比如下载插件,使用xshell工具连接等等 ifconfig 查看网络配置,类似windows的ipconfig
全栈程序员站长
2022/08/15
13.3K0
Linux 设置固定IP地址
Linux配置IP地址的方法
注:虚拟机系统通过克隆方式得到其他系统后,在同一网络中无法上网,很可能由于其网卡的UUID相同造成冲突引起的。 解决方案:
全栈程序员站长
2022/06/26
9K0
网络号 IP地址 子网掩码如何计算
1.Internet上每一台计算机都有唯一的地址来标识它的身份,即IP地址,使用域名其实也是要转化为IP地址的。
双面人
2019/06/02
4.5K0
centos7 配置主机名和Ip地址
有关于centos7获取IP地址的方法主要有两种,1:动态获取ip;2:设置静态IP地址
happlyfox
2020/05/18
2.3K0
centos7 配置主机名和Ip地址
Linux 主机网络接入配置
网络配置是我们在安装好操作系统之后,需要解决的第一步。现时代没有接入网络的主机已然等同于一堆废铁。在网络配置的过程中,通常我们需要配置本机IP地址,缺省网关,DNS,主机名等等。本文主要描述在Linux环境下,主要以传统命令行方式讲解如何将主机接入网络。对于网路配置的新命令如ip,nmcli等等在以后的文章中描述。
Leshami
2018/08/08
7.5K0
CentOS7 配置静态地址、关闭防火墙
systemctl enable NetworkManager-wait-online.service
可定
2020/04/20
1.2K0
如何为SUSE配置IP地址,网关和DNS
方法一、在命令行中配置。输入: ifconfig eht0 9.111.66.96 netmask 255.255.255.0 up route add default gw 9.111.66.1 方法二、在文件中设置。 示例参数: DNS:8.8.8.8 8.8.4.4 IP:192.168.21.172 网关:192.168.21.2 子网掩码:255.255.255.0 1、设置IP地址 #vi /etc/sysconfig/network/ifcfg-eth0 #编辑配置
yaohong
2019/09/11
7.9K0
Linux:ifconfig命令
ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。
HLee
2021/08/11
1.7K0
Linux:ifconfig命令
相关推荐
Linux系统之ipcalc命令的基本使用
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档