海山数据库(He3DB)源码详解:主备复制pg_wal_replay_resume

Postgres备库日志的停止与继续复制 参考文档: 9.26.系统管理函数 (postgres.cn) 表9.81中展示的函数空值恢复的进程。这些函数只能在恢复过程中被执行。 表9.81.恢复控制函数 名称 返回类型 描述 pg_is_wal_replay_paused() bool 如果恢复被暂停,为真。 pg_wal_replay_pause() void 立即暂停恢复(仅限于超级用户)。 pg_wal_replay_resume() void 如果恢复被暂停,重启之... 阅读详情

# 大云海山数据库(He3DB)源码详解:主备复制pg_wal_replay_resume、pg_is_wal_replay_paused

背景

He3DB 采用了先进的存储引擎和查询优化技术,能够快速处理大量数据和复杂查询。无论是 OLTP(在线事务处理)还是 OLAP(在线分析处理)场景,都能提供出色的性能表现。He3DB 具备完善的数据备份和恢复机制,能够在系统故障或数据损坏时快速恢复数据,确保业务的连续性。He3DB 支持水平扩展和垂直扩展,可以轻松应对不断增长的数据需求。He3DB 提供了严格的访问控制和数据加密功能,确保数据的安全性和隐私性。

主备复制

时间点恢复——pg_wal_replay_resume

pg_wal_replay_resume函数在数据库处于恢复过程且未触发备用服务器提升操作时,恢复或继续 WAL 重放

在这里插入图片描述

  1. 检查恢复是否正在进行中
    首先调用RecoveryInProgress()函数来确认当前数据库是否处于恢复模式。如果数据库不是在恢复模式下运行(即,它是一个正常运行的主数据库或已经完成了恢复过程的备用数据库),则函数会抛出一个错误
    错误信息会明确指出“recovery is not in progress”,并给出提示,说明这些恢复控制函数只能在恢复过程中执行
Datum
pg_wal_replay_resume(PG_FUNCTION_ARGS)
{
	if (!RecoveryInProgress())
		ereport(ERROR,
				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
				 errmsg("recovery is not in progress"),
				 errhint("Recovery control functions can only be executed during recovery.")));
  1. 检查是否触发了提升(Promote)操作
    函数检查是否触发了将备用数据库提升为主数据库的操作。这是通过调用PromoteIsTriggered()函数来完成的
    如果已经触发了提升操作,函数会抛出一个错误,指出“standby promotion is ongoing”。同时,给出提示,说明在提升操作被触发后,pg_wal_replay_resume() 函数不能被执行
if (PromoteIsTriggered())
		ereport(ERROR,
				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
				 errmsg("standby promotion is ongoing"),
				 errhint("%s cannot be executed after promotion is triggered.",
						 "pg_wal_replay_resume()")));
  1. 恢复(继续)WAL 重放
    如果上述两个检查都通过,函数会调用SetRecoveryPause(false)来设置恢复进程不再暂停,即恢复或继续WAL的重放
SetRecoveryPause(false);
  1. 返回
    函数通过PG_RETURN_VOID(); 返回,表示没有返回值
	PG_RETURN_VOID();
}

函数调用栈

在这里插入图片描述

时间点恢复——pg_is_wal_replay_paused

  1. 检查恢复是否正在进行中
    函数首先调用RecoveryInProgress()函数来确认当前数据库是否处于恢复模式。这是执行任何恢复控制函数的前提条件
    如果数据库不是在恢复模式下运行(即,它是一个正常运行的主数据库或已经完成了恢复过程的备用数据库),则函数会抛出一个错误
    错误信息会明确指出“recovery is not in progress”,并给出提示,说明这些恢复控制函数只能在恢复过程中执行
Datum
pg_is_wal_replay_paused(PG_FUNCTION_ARGS)
{
	if (!RecoveryInProgress())
		ereport(ERROR,
				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
				 errmsg("recovery is not in progress"),
				 errhint("Recovery control functions can only be executed during recovery.")));
  1. 返回结果
    函数通过PG_RETURN_BOOL返回一个布尔值,表示WAL重放是否暂停。如果WAL重放暂停了,则返回true;否则,返回false
	PG_RETURN_BOOL(GetRecoveryPauseState() != RECOVERY_NOT_PAUSED);

函数调用栈

在这里插入图片描述

时间点恢复——pg_wal_replay_pause

pg_wal_replay_pause在数据库恢复过程中暂停 WAL 回放,如果数据库未处于恢复状态或备用服务器晋升正在进行中则报错,设置恢复暂停标志并唤醒恢复进程后返回。

在这里插入图片描述

  1. 检查恢复是否正在进行中
    首先调用RecoveryInProgress()函数来检查当前数据库是否处于恢复模式。如果数据库不是在恢复模式下运行(即,它是一个正常运行的主数据库或已经完成了恢复过程的备用数据库),则函数会抛出一个错误
    错误信息会明确指出“recovery is not in progress”,并给出提示,说明这些恢复控制函数只能在恢复过程中执行
	if (!RecoveryInProgress())
		ereport(ERROR,
				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
				 errmsg("recovery is not in progress"),
				 errhint("Recovery control functions can only be executed during recovery.")));
  1. 检查是否触发了提升(Promote)操作
    接下来,函数检查是否触发了将备用数据库提升(Promote)为主数据库的操作。这是通过调用PromoteIsTriggered()函数来完成的
    如果已经触发了提升操作,函数会抛出一个错误,指出“standby promotion is ongoing”。同时,给出提示,说明在提升操作被触发后,pg_wal_replay_pause()函数不能被执行
if (PromoteIsTriggered())
		ereport(ERROR,
				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
				 errmsg("standby promotion is ongoing"),
				 errhint("%s cannot be executed after promotion is triggered.",
						 "pg_wal_replay_pause()")));
  1. 设置恢复暂停状态
    如果上述两个检查都通过,函数会调用SetRecoveryPause(true)来设置恢复暂停状态。这意味着后续的WAL重放将被暂停,直到恢复过程被明确恢复
SetRecoveryPause(true)
  1. 唤醒恢复进程
    函数通过调用WakeupRecovery()来唤醒恢复进程。这是必要的,因为恢复进程可能在等待新的WAL数据或处于某种休眠状态。唤醒恢复进程可以确保它尽快处理暂停请求
WakeupRecovery();
  1. 返回
    最后,函数通过PG_RETURN_VOID(); 返回,表示没有返回值
PG_RETURN_VOID();

函数调用栈

在这里插入图片描述

作者介绍

周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师

PG_RETURN_VOID();

函数调用栈

[外链图片转存中…(img-eSnOughD-1731654888416)]

作者介绍

周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师

【PG高可用】三 PostgreSQL高可用之自动故障转移-repmgrd repmgrd的功能:丰富的配置管理方便自定义脚本见证服务器多数据中心多种探活方式监控统计数据2 repmgrd 设置和配置repmgrd是一个守护进程,在每个 PostgreSQL 节点上运行,当运行在主节点上时可以监视本地节点,当运行在从节点上 可以监控它所连接的上游节点(上游节点可以是:主节点或级联复制的另一个中间节点)。rempgrd可以配置为在主节点或上游节点变得无法访问时提供故障转移功能,向repmgr 元数据库提供监控数据。 阅读详情

相关推荐

告别手动复制粘贴!用Python脚本+pywinauto实现PC微信消息自动发送(附完整源码)

本文详细介绍了如何利用Python和pywinauto实现PC微信消息的自动化发送,告别繁琐的手动操作。从环境搭建、UI控件定位到构建健壮的发送流程,再到高级功能扩展和项目打包部署,全面解析了自动化办公的实现方案,显著提升工作效率。

weixin_30315723的博客 585

postgres--流复制

配置 master 192.168.2.21 5432 slave 192.168.2.22 5432 目录 /var/lib/pgsql/10/data/ 配置主库 配置用户 psql create role rep login replication encrypted password '1qaz2wsx'; 配置访问权限 pg_hba.c...

ddk4044的博客 570

卫星测试科普(三):卫星载荷的核心测试设备探秘

总的说来,卫星芯片与元器件,部组件与单机,整机与子系统,系统与整星的设计、定型、制造、验证、总装、发射、在轨等环节都离不开各种测试场景,对于这些卫星测试场景而言,“射频三大件”与高速数字示波器是构成强大测试系统的基础。卫星通信信号生成:覆盖Ka、Q等波段,具备扫频、脉冲、数字调制、噪声信号、雷达信号、数据链信号、OFDM 等多种信号库,用于测试和验证卫星电子设备的电气性能、频率响应、抗干扰能力等。卫星的通信需要高效、快速地传输大量数据,高速信号的质量至关重要,如果卫星信号不佳,卫星就会出现故障或者隐患。

spwbjss的博客 2319

基于PostgreSQL流复制的容灾库架构设想及实现

点击上方"蓝字"关注我们,享更多干货!一、前言这几天在对PostgreSQL流复制的架构进行深入研究,其中一个关键的参数:recovery_min_apply_delay引...

Enmotech的博客 442

青龙面板实战:用快手极速版脚本日赚XX元的核心参数解析

本文深入解析了青龙面板运行快手极速版脚本的核心参数配置,旨在帮助进阶用户提升收益稳定性。重点剖析了设备标识符(did)的获取原理、多账号Cookie的精准拼接规则,以及如何通过科学设置定时任务频率来量化并优化收益,实现细水长流的稳定收益。

weixin_29310605的博客 1075

版图提取的spice网表中参数含义及二级效应STI/WPE

寄生电阻、寄生电容可以从版图提出的.sp文件中看, ad area of drain 面积 as area of source pd perimeter of drain 周长,PS PD周长都不计算与栅极接触的部分 ps perimeter of source nrd 漏扩散区等效方块数 nrs 源扩散区等效方块数 sa ...

qq_40007892的博客 6554

PostgreSQL 10 流式物理、逻辑主从 最佳实践

标签 PostgreSQL , 流复制 , 主从 , 逻辑订阅 背景 流复制起源 PostgreSQL 自从2010年推出的9.0版本开始,支持流式物理复制,用户可以通过流式复制,构建只读备库(主备物理复制,块级别一致)。流式物理复制可以做到极低的延迟(通常在1毫秒以内)。 同步流复制 2011年推出的9.1版本,支持同步复制,当时只支持一个同步...

weixin_34072857的博客 506

血管分割中的直径平衡难题:从clDice到cbDice的演进与实践

本文探讨了血管分割中的直径平衡难题,详细分析了从clDice到cbDice的技术演进与实践。通过引入半径感知权重和边界对齐惩罚,cbDice在保持拓扑完整性的同时提升了几何敏感度,显著改善了细小血管的分割效果。文章还分享了在nnU-Net中实现cbDice的工程细节,包括GPU加速骨架提取和多任务损失组合策略,为医学影像分析提供了重要参考。

weixin_29170327的博客 243

Postgresql 系统相关函数介绍

Postgresql xlog  先看下pg_xlog下物理文件的命名,大小在数据库编译安装的时候-with-wal-segsize指定 000000010000000200000019 XLogFileName宏里定义的,分别由时间线ID、日志ID、段ID的八位16进制数依次构成 日志ID最大为0xFFFFFFFFF,段ID最大为0x000000F 相关

魂醉的一亩二分地 2745

在 SAP Fiori 中正确配置 Group 角色:从 PFCG 分配到首页呈现的完整链路

摘要:SAP Fiori项目中,用户登录后能否看到应用往往取决于角色配置而非前端开发。关键在于通过PFCG角色将launchpad designer中创建的tile group关联到用户角色。Catalog是应用池,group是用户首页可见的工作区。正确配置后,用户会看到角色对应的默认分组,同时保留个性化调整能力。项目实施中常见问题是应用开发完成但未正确配置group与角色关联,导致业务用户无法在首页看到应用入口。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 167

(计算机组成原理)第二章数据的表示和运算-第二节:数字电路基础知识

本文介绍了计算机组成原理中的逻辑门电路、多路选择器和三态门。逻辑门电路包括基本逻辑运算(与、或、非)和复合逻辑运算(与非、或非、异或、同或),这些运算通过门电路实现,并满足分配律和结合律。多路选择器(MUX)用于从多个输入信号中选择一个输出,广泛应用于数据选择、资源共享和逻辑函数实现等场景。三态门则具有三种输出状态(高电平、低电平、高阻态),常用于总线控制和信号隔离。这些元件在数字电路设计和计算机系统中具有重要作用。

快乐江湖的博客 2475

PostgreSQL复制特性历史漫谈-士别三日,当刮目相看

点击▲关注 “数据和云”   给公众号标星置顶更多精彩 第一时间直达刘伟刘伟,云和恩墨软件开发部研究院研究员;前微博DBA,主要研究方向为开源数据库,分布式数据库,擅长自...

Enmotech的博客 682

CCP消息格式

CCP消息格式 CCP协议的实现只依赖于两则CAN消息CRO(Command Receive Object)和DTO(Data Transmission Object),CCP消息统一采用8字节数据场,所有命令参数以及数据都被打包在8字节的数据场中。 1、CRO(命令接收对象) CRO是主设备向从设备发送的消息对象,包括命令代码及命令参数,结构如下: CCP一共28条命令,所以命令代码有28个。...

wsq119的博客 1206

pg基本知识

目录 base: 默认表空间 global: 共享系统表目录 pg_clog: commit log 目录 pg_log: 系统日志目录,查询系统错误时可看,alert日志,慢日志,全量sql都在此 pg_stat_tmp: 统计信息的存储目录 pg_tblsp: 指向各个用户自建表空间实际目录的链接文件 pg_twophase: 两阶段提交功能时分布式事务的存储目录 pg_xlog: WAL日...

zhangjikuan的专栏 5866

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Postgresql 复制延迟 和 复制"延迟" 与 复制停止大乌龙

Mysql的逻辑复制性能虽然被诟病的比较久了,但是功能多,延迟复制,级联复制,多源复制. 尤其MYSQL的复制的灵活性有种被玩坏了感觉. POSTGRESQL 的复制方式其实也是支持延迟...

sql server的专栏 2594

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

PostgreSQL日常基本命令

连接数据库 $ psql -U user_name -d database_name -h serverhost 常用操作 \h #查看所有的sql关键字 \? #命令行操作的帮助 \d #查看当前schema 中所有的表 \q #退出pg命令行 \d #schema.table 查看表的结构 \x #横纵显示切换 \dT+ #显示扩展类型相关属性及描述 \dx ...

欢迎来到我的技术分享博客!这里将带你深入了解AI技术、Java架构设计、系统开发与优化等前沿技术内容。我专注于从实战经验 3798

基于postgresql流复制的容灾库架构设想及实现

一、前言 这几天在对postgresql流复制的架构进行深入的研究,其中一个关键的参数:recovery_min_apply_delay引起了我的注意,设置该参数的大概意思是:在进行流复制的时候,备库会延迟主库recovery_min_apply_delay的时间进行应用。比如说,我们在主库上insert了10条数据,那么不会立即在备库上生效,而是在recovery_min_apply_delay的时间后,备库才能完成应用。 另外,我们知道,在postgresql中,其mvcc的机制并不像oracle或者m

wx370092877的博客 429

pg_is_xlog_replay_paused()

pg_is_xlog_replay_paused() bool True if recovery is paused. pg_xlog_replay_pause() void Pauses recovery immediately (restricted to superusers by default, ...

HighGO 883
上一篇: 海山数据库(He3DB)源码解读:T_GrantRoleStmt原理浅析
下一篇: 海山数据库(He3DB)源码详解:主备复制read_backup_label
DAWN1221
博客等级 码龄7年 893粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值