postgres数据库的流复制
1. 流复制和逻辑复制的差异
- 逻辑复制和流复制最直观的不同是,逻辑复制支持表级别复制
- 区分点事原理不同
-
- 逻辑日志是在wal日志产生的数据库上,由逻辑解析模块对wal日志进行初步的解析,解析结果是ReorderBufferChange(理解为HeapTupleData),再由pgoutput plugin对中间结果进行过滤和消息化拼接,然后将其发送到订阅端,订阅端根据接受到的Heap TupleData重新对其执行insert、delete、udpate操作
- 流复制时将数据从walrecord拷贝到数据页,
- 逻辑复制时将数据重新执行一次insert、update或delete
2. 流复制
- 流复制面对未提交的事务,事务没有提交也会同步到备机,当主库进行提交和回滚的时候,也会同步进行提交和回滚。对大事务相对友好
- 流复制会导致备机也会产生大量死元祖,需要做vacuum
- 流复制时将wal日志中记录的内容按照确切的块地址逐字节的拷贝到备库,因此主备之间数据分布是一样的,意味着主备机器上,同一条记录的ctid是相同的
3. 流复制的实现原理

- 后端进程通过执行XLogInsert和XLogFlush函数,将wal数据写入并刷新到WAL段文件中
- walsender进程将写入wal段的wal数据发送给walreveiver进程
- 发送wal数据后,后端进程继续等待备用服务器的ACK响应。更准确的说,后端进行通过执行内部函数SyncRepWaitForLSN获得一个latch,并等待他被释放
- 备用服务器上的walreveiver将接受到的wal数据写入备用的wal段中,使用write系统调用,并向walsender返回一次ACK响应
- walreveiver使用如fsync等系统调用将wal数据刷新到wal段,向walsender返回另一个ACK响应,并通知启动进程关于wal数据的刷新
- startup进程回访已写入wal段的wal数据
- 当walsender收到walreveiver的ack响应时,释放后端进程的latch,然后后端进程的提交或中止操作将完成。latch释放的时机取决于参数synchronous_commit,如果设置为on,当收到步骤5的ACK时释放latch,如果设置为remote_wirte,则在收到步骤3的ACK时释放latch
ACK的包括内容
- 写入最新wal数据的lsn位置
- 刷新最新wal数据的lsn位置
- 在启动过程中回放最新wal数据的lsn位置
- 发送此响应的时间戳
过程分析
- 主库的进程进行写操作
- 产生WAL record
- walsender感知到新的wal,发送给备库
- 备库接受,写盘再回放
是否发送wal日志与主库事务的提交与否没有关系,但主库是否能提交取决于备库的wal日志写入位置,默认是on的话需要落盘,备库实时回放
注意点
- 流复制就是借助latch实现主从进程间的协作
- 流复制场景下,只读事务、子事务的提交以及事务回滚,无需等待备库的ACK
相关文章:
postgres数据库的流复制
1. 流复制和逻辑复制的差异 逻辑复制和流复制最直观的不同是,逻辑复制支持表级别复制区分点事原理不同 逻辑日志是在wal日志产生的数据库上,由逻辑解析模块对wal日志进行初步的解析,解析结果是ReorderBufferChange(理解为HeapTup…...
Dxf库中的DL_Extrusion类
类DL_Extrusion DL_Extrusion 是 DXF 库中的一个类,用于表示三维实体的扩展信息。在 DXF 文件中,DL_Extrusion 类通常用于表示具有高度的三维图形实体,如立方体、圆柱体等,以及其它具有体积的几何对象。 以下是一个简单的示例代…...
“ONLYOFFICE 8.1版本评测:功能更强大,用户体验更佳”
最新版本的在线编辑器已经发布 ONLYOFFICE在线编辑器的最新版本8.1已经发布,整个套件带来了30多个新功能和432个bug修复。这个强大的文档编辑器支持处理文本文档、电子表格、演示文稿、可填写的表单和PDF,并允许多人在线协作,同时支持AI集成…...
搜维尔科技:【研究】触觉手套比控制器更能带来身临其境、更安全、更高效的虚拟体验
自然交互可提高VR模拟的有效性。研究表明,触觉手套比控制器更能带来身临其境、更安全、更高效的虚拟体验。 以下是验证 医疗培训中的触觉技术 “ 95.5%的参与者表示触摸是 XR 教育的重要组成部分,90.9% 的参与者表示 XR 触觉将提供一个安全的学习场所。…...
【小学期】实体类设计——以学生管理系统为例
项目目录中的位置 将Student.java文件放在src/model目录中,即: student_management │ ├── src │ ├── model │ │ ├── Student.java // 这里是Student实体类 │ │ └── StudentDAO.java │ │ │ ├── view │ │ …...
Java测试类
在Java中,为了编写测试类,通常使用JUnit框架。 1. 首先,创建一个名为Calculator的简单Java类,它包含一个方法add用于计算两个整数的和: public class Calculator {public int add(int a, int b) {return a b;} } 2.…...
python 中面向对象编程:深入理解封装、继承和多态
在本章中,我们将深入探讨Python中的高级面向对象编程概念,包括封装、继承和多态。让我们开始吧! 目录 面向对象简介类和实例属性和方法继承和多态 高级面向对象概念私有变量使用 property使用 __slots__类的特殊成员__doc____call____str____…...
OpenCV练习(2)图像校正
1、傅里叶变换 霍夫变换 直线 角度 旋转2、边缘检测 霍夫变换 直线角度 旋转3、四点透视 角度 旋转4、检测矩形轮廓 角度 旋转 1.目的 实现类似全能扫面王的图像校正功能 2. 基于轮廓提取和透射变换 基于轮廓提取和透射变换的矫正算法更适用于车牌、身份证、人民…...
Excel中的“点选输入”——次级下拉列表创建
在Excel中,用“数据验证”功能可以设置下拉列表,二级下拉列表需要设置公式。 (笔记模板由python脚本于2024年06月16日 18:36:37创建,本篇笔记适合经常使用Excel处理数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:http…...
基于 Spring AOP 实现安全检查
在现代应用程序中,安全性是一个至关重要的方面。通过对系统中的关键操作进行安全检查,可以有效防止未授权的访问和操作。Spring AOP(面向切面编程)提供了一种优雅的方式来实现安全检查,而无需修改业务逻辑代码。本文将…...
【MySQL】数据库事务详解
文章目录 前言1. 事务的定义2. 事务的四个特性2.1 原子性2.2 一致性2.3 隔离性2.4 持久性 3. 事务的并发问题3.1 脏读3.2 不可重复读3.3 幻读3.4 更新丢失 4. 事务的隔离级别5. 事务的使用结语 前言 假设我们现在需要操作数据库进行转账,A 给 B 转账 100 块钱&…...
ubuntu链接mysql
C链接mysql 报错 sudo apt-get update sudo apt-get install libmysqlclient-dev 指令编译 g -o mysql_example mysql_example.cpp -I/usr/include/mysql -lmysqlclient g mysql_test.cpp mysql_config --cflags --libs 安装mysql sudo apt updatesudo apt install mysql-…...
QStyledItemDelegate 和 QItemDelegate 的作用
在Qt中,QStyledItemDelegate和QItemDelegate是用于自定义和控制项视图控件(如QListView、QTableView、QTreeView)中项的显示和编辑的委托类。它们提供了对项的外观和编辑行为的定制能力。尽管它们在功能上有相似之处,但它们之间有…...
3.任务的创建与删除
1.什么是任务? 任务可以理解为进程/线程,创建一个任务,就会在内存开辟一个空间。 任务通常都含有while(1)死循环 2.任务创建与删除相关的函数 3.CUBEMAX相关配置 编辑一个led1闪烁的任务...
进程、CPU、MMU与PCB之间的关系
目录 进程与cpu(中央处理器) 源代码、程序、cpu与进程的关系 cpu超线程 CPU的简易架构与处理数据过程 进程与MMU(内存管理单元) mmu作用 cpu和mmu的关系 进程与PCB(进程控制块) PCB介绍与内部成员…...
代码随想录算法训练营Day50|1143.最长公共子序列、1035.不相交的线、53.最大子序和、392.判断子序列
最长公共子序列 1143. 最长公共子序列 - 力扣(LeetCode) 代码随想录 (programmercarl.com) 最长公共子序列 - 动态规划 Longest Common Subsequence - Dynamic Programming_哔哩哔哩_bilibili 本题和上一题718.最长重复子数组在很多方面相似…...
国家自然科学基金标书大全(2002-2024)
数据来源:在20世纪80年代初,为了促进中国的科技体制革新并改革科研资金分配机制,中国科学院的89位院士联名向党和国家领导人提出建议,设立了国家自然科学基金的设立。国自然基金自创立以来,根据国家发展科学技术方针、…...
Python代码打包成exe应用
目录 一、前期准备 二、Pyinstaller打包步骤 Pyinstaller参数详解 三、测试 Spec 文件相关命令 一、前期准备 (1)首先,我们需要确保你的代码可以在本地电脑上的pycharm正常运行成功。 (2)我们要先安装Pyinstalle…...
CesiumJS【Basic】- #016 多边形面渲染“花了”的问题
文章目录 多边形面渲染“花了”的问题1 目标2 问题代码3 修正后代码4 总结多边形面渲染“花了”的问题 1 目标 解决多边形的面“花了”的问题 2 问题代码 使用Cesium.PerInstanceColorAppearance渲染后出现色斑 import * as Cesium from "cesium";const viewer …...
qt 开发对信号槽进行二次封装,实现信号槽管理接口。
最近做的一个项目,由于工程需要模块之间能够互相通信,但又不想模块之间耦合度太高 使用信号槽的话,需要两个类的对象或者指针在其中一个类都要体现,这样达不到效果, 想要一个管理类对这些互相通信的类之间进行管理,只需要在各自的类注册发送者和接收者即可,双方通过一…...
除了 Docker 还能用什么?一文看懂容器技术的“四大门派”
除了 Docker 还能用什么?一文看懂容器技术的“四大门派” 在云原生时代,Docker 几乎成了容器的代名词。但实际上,容器技术是一片茂密的森林,除了 Docker,还有许多针对特定痛点(如安全、性能、隔离性&#x…...
为内容生成应用动态切换 Taotoken 上的不同模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为内容生成应用动态切换 Taotoken 上的不同模型 在内容创作类应用的开发中,一个常见的需求是根据不同的文本类型&#…...
波特律动串口助手:如何在浏览器中实现专业级串口调试的完整教程
波特律动串口助手:如何在浏览器中实现专业级串口调试的完整教程 【免费下载链接】SerialAssistant A serial port assistant that can be used directly in the browser. 项目地址: https://gitcode.com/gh_mirrors/se/SerialAssistant 波特律动串口助手是一…...
PSIM 9.0 手把手教学:从零搭建直流电机双闭环调速模型(附完整代码与波形分析)
PSIM 9.0 手把手教学:从零搭建直流电机双闭环调速模型(附完整代码与波形分析) 在电力电子与电机控制领域,仿真技术已成为工程师和研究人员不可或缺的工具。PSIM作为一款专业的电力电子仿真软件,以其高效的仿真速度和直…...
告别手动抢红包!用Kotlin写一个Android微信红包监听助手(附完整代码)
用Kotlin构建Android微信红包自动化工具:从原理到避坑指南 春节聚会时,你是否曾因低头抢红包错过亲友的精彩对话?工作群里的手气红包总在分神时一闪而过?作为一名Android开发者,其实可以用技术优雅解决这些烦恼。本文…...
微信网页版访问终极指南:wechat-need-web插件完整教程
微信网页版访问终极指南:wechat-need-web插件完整教程 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为无法在浏览器中使用微信网页版…...
为什么预训练再好的VLA,在新任务上普通SFT 并不好用?CapVector给出了原因和方案
Vision-Language-Action(VLA)模型现在已经很强了。 但一个很现实的问题是: 预训练再充分的 VLA,到了新任务上,普通 SFT 往往并不好用。 很多工作发现: 训练收敛慢少量 demonstration 不够泛化能力并没有…...
基于RK3568的边缘AIoT实战:多模态行为识别系统设计与优化
1. 项目概述:从赛题到全国一等奖的实战复盘去年,我们团队抱着“试试看”的心态参加了瑞芯微与飞凌嵌入式联合举办的全国大学生嵌入式设计大赛,最终捧回了全国一等奖的奖杯。现在比赛尘埃落定,我想把整个项目从破题、选型、开发到最…...
告别adb命令行:用C++和libusb手撸一个USB调试工具(附完整源码)
告别adb命令行:用C和libusb手撸一个USB调试工具(附完整源码) 你是否厌倦了反复敲击adb命令,却对背后的USB通信机制充满好奇?本文将带你深入Android调试桥(ADB)的底层世界,用C和libus…...
IDM激活脚本:3分钟解锁完整版下载功能的终极指南
IDM激活脚本:3分钟解锁完整版下载功能的终极指南 【免费下载链接】IDM-Activation-Script-ZH IDM激活脚本汉化版 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script-ZH 还在为Internet Download Manager(IDM)的30天…...
