参数详解 复制进程_如何优化PostgreSQL逻辑复制

How to Optimize PostgreSQL Logical Replication

fd61bea2500a32663d5498cf633493c3.png

逻辑复制( 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 , 本博客关注如何优化。

0b219474f502dcd70e83859c2296a9e0.png

优化逻辑复制

首先, 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我发现我的Java重拍了!

在一月份,我写了一篇文章,介绍了一些我希望在Java语言中看到的变化,这些变化会让我更加喜欢它(并使它变得更现代)。 很多人建议使用许多JVM语言,但我基本上不予使用,因为这不是我想要的。 我希望…

Android Studio使用说明

声明: 本博客文章原创类别的均为个人原创,版权所有。转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com。 凌晨的Google I/O大会上,宣布了Android Studio,引起了现场开发者的一片欢呼。那么&#x…

有些窗口底部被任务栏挡住了_开始使用 Tint2 吧,一款 Linux 中的开源任务栏

Tint2 是我们在开源工具系列中的第 14 个工具,它将在 2019 年提高你的工作效率,能在任何窗口管理器中提供一致的用户体验。-- Kevin Sonney每年年初似乎都有疯狂的冲动想提高工作效率。新年的决心,渴望开启新的一年,当然&#xff…

从jHiccup开始

写完“如何在生产中检测和诊断慢速代码”一文后,我受到读者的鼓励,尝试从Azul系统尝试jHiccup 。 去年,我参加了jHiccup的创建者Gil Tene的演讲,探讨了测量延迟的正确方法,其中,他向我们介绍了jHiccup。 它…

nullnull使用PL/SQL获取创建用户的语句

在写这篇文章之前,xxx已经写过了几篇关于改nullnull主题的文章,想要了解的朋友可以去翻一下之前的文章 Create procedure: create or replace procedure get_case_sqls_for_ddls_ver1 ascursor get_username isselect username from dba_users;beginfor l_user in g…

axios发送post数据后台收不到_使用axios post 提交数据,后台获取不到

https://www.cnblogs.com/yiyi17/p/9409249.html(copyhttps://www.cnblogs.com/loveyaxin/p/8385694.html(copy问题场景场景很简单,就是一个正常 axios post 请求:axios({headers: {deviceCode: A95ZEF1-47B5-AC90BF3},method: post,url: /api/lockServe…

在JDK 8中连接字符串

JDK 8引入了语言功能,例如lambda表达式 , 流 ,甚至是新的Date / Time API ,这些都会改变我们编写Java应用程序的方式。 但是,还有一些新的API和功能可能不太“改变游戏规则”,但仍为Java编程语言带来了更大…

华为内部面试题库---(6)

1.在SMP体系结构中,中断亲和性是指将一个或者多个中断绑定到特定CPU core上运行,下列说法错误的是:A.每个硬件设备都会在/proc/irq下有个中断号命令的目录来标志中断亲和性B.IRQ#目录下smp_affinity文件,通过设置CPU位掩码&#x…

基元需要走吗?

我目前正在使用JSF作为视图技术,使用JPA作为持久层的企业应用程序。 它可能是支持bean或服务方法中的某种东西,但令我震惊:是否有充分的理由在企业应用程序中使用原语? 当我开始围绕J2SE 1.2使用Java进行编程(或者是J…

输入参数_太实用!输入参数1秒算出功率,这款计算工具又快又准

随着互联网红利的不断加深,到了后期,不断地各种工具开始涌现,方便了很多用户,填补了市场上的很多空白,有生活娱乐类、提高效率类、垂直专业类、系统工具类等等。工业行业作为各行各业的大头,机械化、智能化…

功能工厂模式

您是否需要一种非常快速的方法来制作Factory对象? 然后,您需要lambda或其他函数传递! 它不仅快速,而且非常简单。 我敢打赌,如果您对Lambdas相当满意,那么您只需阅读标题就可以做到这一点。 如果您是其中之…

指向二维数组的指针测试

定义a为二维数组后,有三种成份:数组本身、3个一维数组(a的每一行对应一个一维数组)、12个数组元素, 由此就有三种指针及对应的指针变量, &a和int (*p1)[3&#xff3d…

python视频流传输_基于OpenCV的网络实时视频流传输的实现

很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头。但是有时,大家又希望能够随时随地观看视频直播。大多数人会选择使用IP摄像机(Internet协议摄像机)而不是CCTV(闭路电视),因为它们具有更高的分辨率并降低了布线成本。在本文中,…

如何编写NetBeans插件

是否想在NetBeans IDE中添加功能或自动执行某些操作? 跟随我们编写您的第一个NetBeans插件。 让我们超越简单的工具栏示例 ,创建一个可以自动更新的插件。 该代码基于NetBeans的WakaTime插件 。 我们的示例插件将仅打印Hello World语句,并在…

单机最大tcp连接数

单机最大tcp连接数 网络编程 在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少? 如何标识一个TCP连接 在确定最大连接数之前&#xf…

用了fastapi还需要nginx_nginx 与 fastdfs 的配置过程,已经越过了许多坑,我跪着进入了欢迎页面。。。...

nginx 与 fastdfs 的配置过程,已经越过了许多坑,我跪着进入了欢迎页面。。。上面的是 fastdfs 与 nginx 的官网,我从这里面跌跌撞撞的走出来了,下面是我总结出来的一条平坦的路,小伙伴们可以参考参考。我下面的攻略其实…

Spring Batch教程–最终指南

这是Spring批处理教程,它是Spring框架的一部分。 Spring Batch提供了可重用的功能,这些功能对于处理大量记录至关重要,包括日志记录/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管…

Neurocomputing 投稿注意事项

1. *.tex 和 *.bib 都以Manuscript项(Item)提交 (abstract.tex除外)2. abstract.tex以Abstract项(Item)提交3. *.eps以Figure项(Item)提交4. biographies.pdf以Biography of the aut…

箱式图 添加异常值平均值_什么是脏数据?怎样用箱形图分析异常值?终于有人讲明白了...

导读:数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础。没有可信的数据,数据挖掘构建的模型将是空中楼阁。数据质量分析的主要任务是检查原始数据中是否存在脏数据…

[编程相关]正则表达式Regex语法

--目录-- 0. 前言1. 正则语法2. 正则搜索语法(1)字符集 Character_Classes(2)锚定符 Anchors(3)计数 Quantifiers(4)分组与索引 Group_And_Reference(5)周围 …