大云海山数据库(He3DB)源码详解:He3DB-SubTrans日志管理器函数之SubTransSetParent

大云海山数据库(He3DB)源码详解:He3DB-MultiXactIdCreateFromMembers 本文基于大云He3DB,针对MultiXactIdCreateFromMembers 进行源码解读分享。MultiXactIdCreateFromMembers 函数的主要逻辑如下:检查本地缓存中是否已经存在相同的成员集合,避免重复创建。验证成员中是否只有一个更新事务,确保多事务的合法性。分配新的 MultiXactId 和偏移量。创建 XLOG 记录,描述新创建的多事务。将多事务信息写入 OFFSET 和 MEMBER 日志文件。 阅读详情

# 大云海山数据库(He3DB)源码详解:He3DB-SubTrans日志管理器函数之SubTransSetParent

背景

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

本文基于大云He3DB,针对SubTrans日志管理模块进行源码解读分享,包含SubTransSetParent函数

SubTransSetParent-子事务日志的写操作

作用:在子事务日志中记录父事务id

子事务日志写操作函数

源码解读

void
SubTransSetParent(TransactionId xid, TransactionId parent)
{
 int			pageno = TransactionIdToPage(xid);
 int			entryno = TransactionIdToEntry(xid);
 int			slotno;
 TransactionId *ptr;

 Assert(TransactionIdIsValid(parent));
 Assert(TransactionIdFollows(xid, parent));       
                  
 LWLockAcquire(SubtransSLRULock, LW_EXCLUSIVE);

 slotno = SimpleLruReadPage(SubTransCtl, pageno, true, xid);
 ptr = (TransactionId *) SubTransCtl->shared->page_buffer[slotno];
 ptr += entryno;

 if (*ptr != parent)
 {
  Assert(*ptr == InvalidTransactionId);
  *ptr = parent;
  SubTransCtl->shared->page_dirty[slotno] = true;
 }

 LWLockRelease(SubtransSLRULock);
}
  • 函数参数
    • xid 子事务id
    • parent 父事务id
 int			pageno = TransactionIdToPage(xid);
 int			entryno = TransactionIdToEntry(xid);

pageno 计算事务idxid对应的页号
entryno 计算事务idxid对应的条目号

条目号:表示在一个页面中的具体位置。每个页面被划分为多个条目,每个条目对应一个事务的父事务 ID

 Assert(TransactionIdIsValid(parent));
 Assert(TransactionIdFollows(xid, parent));    
  1. 确保parent是有效父事务id
  2. 确保xid在parent之后
  • 获取名为SubtransSLRULock的轻量级锁(排他锁)
 slotno = SimpleLruReadPage(SubTransCtl, pageno, true, xid);
 ptr = (TransactionId *) SubTransCtl->shared->page_buffer[slotno];
 ptr += entryno;
  • 从子事务日志的 LRU 缓存中读取指定页号 pageno 对应的页面,并返回该页面对应的槽位号
  • 将slotno对应的page_buffer强制转换为TransactionId *类型,储存在ptr中
  • 将指针移动到目标条目号
 if (*ptr != parent)
 {
  Assert(*ptr == InvalidTransactionId);
  *ptr = parent;
  SubTransCtl->shared->page_dirty[slotno] = true;              
 }
  • 如果当前的xid(*ptr将指针解引用)不等于父事务idparent

    • 断言,确保当前id必须是无效id
    • 将parent赋值给*ptr
    • 将槽位号对应的page设置为脏,表示已经修改
  • 释放轻量级锁

函数流程图

该函数流程图如下所示:
在这里插入图片描述

函数调用栈

通过source insight可以查看函数SubTransSetParent的调用栈
在这里插入图片描述
source insight安装流程可以参考这篇文章:Source insight 工具安装及使用方法

总结

本文基于大云He3DB,针对SubTrans日志管理模块进行源码解读分享。

函数名作用
SubTransSetParent在子事务日志中记录父事务id

其余文章参考链接

大云海山数据库(He3DB)源码详解:He3DB-CLOG日志管理器函数之TransactionIdSetTreeStatus

大云海山数据库(He3DB)+AI(五):一种基于强化学习的数据库旋钮调优方法

大云海山数据库(He3DB)+AI(四):一种基于迁移学习的启发式数据库旋钮调优方法

大云海山数据库(He3DB)源码解读:海山PG 词法、语法分析

大云海山数据库(He3DB)源码详解:海山PG 空闲空间映射表FSM

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

作者信息

公司职位
中移苏研助理软件研发工程师
大云海山数据库(He3DB)源码详解:He3DB-SubTrans日志管理器函数之SubTransGetParent、SubTransGetTopmostTransaction 函数名作用获取目标事务的父事务id获取给定TransactionId的顶层事务ID。 阅读详情

相关推荐

大云海山数据库(He3DB)源码详解:He3DB-CLOG日志管理器函数之WriteZeroPageXlogRec、CheckPointCLOG

函数作用创建一个新CLOG日志页面时,调用该函数创建一条ZEROPAGE的XLOG日志记录,以记录所创建CLOG日志页面的页面号,方便系统崩溃或恢复过程中重建CLOG日志。

Eric_yuanhui的博客 882

大云海山数据库(He3DB) 内核分析-子查询优化

文章摘要:本文分析了He3DB中子查询优化的实现,重点探讨了子连接上拉和子查询上拉两种优化技术。子连接上拉主要处理EXISTS_SUBLINK和ANY_SUBLINK类型,将其转换为半连接或反连接;子查询上拉则通过pull_up_subqueries_recurse函数实现,需满足特定条件才能提升简单子查询。文章详细说明了各类子查询的转换条件、处理流程及代码实现逻辑,揭示了He3DB子查询优化的实现机制与限制。

weixin_43544348的博客 1074

蓝牙钥匙 第48次 全面解析防中继攻击保护:从原理到防护技术实践

中继攻击已成为物联网安全领域的重要威胁,2023年全球相关损失达数十亿美元。本文深入分析中继攻击原理,揭示其通过转发设备延长通信距离而不破解加密的特点。重点探讨两种关键防护技术:基于距离测量的方法(包括UWB超宽带技术)可精确检测异常距离;基于时间戳的挑战-响应机制则通过严格时间窗口识别中继延迟。文章还提出多层次防护体系构想,结合AI异常检测和量子安全协议等前沿技术。研究显示,集成多种防护技术并遵循行业标准是应对中继攻击的有效途径,为物联网设备安全提供重要参考。

IT深耕十余载,大道之简 1823

移动云大云海山数据库(He3DB)基于postgresql_anonymizer插件动态数据脱敏用法

本文将详细介绍 postgresql_anonymizer 插件的核心用法,包括脱敏规则配置(静态绑定与动态绑定)、权限管理、脱敏效果验证、规则维护及高级应用场景,帮助用户快速掌握基于海山数据库实现动态数据脱敏的实操方案,为业务场景中的敏感数据提供全方位保护。李*明 | 139****4321 | 310101********6789 | li****@example.com。王* | 137****3344 | 440101********4321 | wa****@example.com。

weixin_43544348的博客 647

WGCNA分析中那些没人告诉你的坑:以肺结核差异基因模块筛选为例

本文深入探讨WGCNA分析在肺结核差异基因模块筛选中的七个关键陷阱,包括soft-thresholding选取、样本离群值检测、模块合并阈值调整等。通过实际案例和R代码示例,揭示生信数据挖掘中常被忽视的技术细节,帮助研究者避免常见错误,提升分析结果的可靠性和生物学意义。

weixin_29218509的博客 261

Yolov5s/Yolov8s网络结构图

yolov8、yolov5网络结构图

Goodness2020的博客 9924

大云海山数据库(He3DB) 内核分析 — Btree索引篇

本文重点分析了He3DB数据库中B-Tree索引的实现原理。首先介绍了B+Tree的基本结构特点,包括键值存储在叶子节点、叶子节点双向链接等。随后详细阐述了索引的创建过程,包括元组转换、排序、页面填充及B+Tree构建等关键步骤。在查询方面,解释了索引扫描的工作原理及与回表操作的配合机制。对于数据更新,分析了索引插入时的页面分裂处理流程,以及删除操作中标记删除与物理删除的区别。最后总结了B+Tree索引在等值和范围查询中的优势,并指出其内部节点与叶子节点的不同指向特点。

weixin_43544348的博客 1042

从POI兴趣点获取到ArcGIS中热力图制作

1. POI获取及坐标点转换 POI获取我们要借助下面这个网站↓↓↓ 规划云http://guihuayun.com/poi/ 搜索POI兴趣点并复制兴趣点, 图 新建txt文本文档,粘贴兴趣点 图片 查看后得知,lng为横坐标,lat为纵坐标 文件,另存为csv格式文件,编码为utf—8 打开QGIS,因为我们pol点是从百度地图上获取的,为BD09坐标系,与WGS84有一定偏移【GCJ02:火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。 BD09:为.

qq_43173805的博客 5598

大云海山数据库(He3DB)源码详解:He3DB-SimpleLruReadPage

本文基于大云He3DB,针对SimpleLruReadPage进行源码解读分享。函数名作用SimpleLruReadPage 函数的作用是从 SLRU 缓冲区中读取一个页面。它通过以下步骤实现:检查页面是否已在内存中。如果页面正在被读取或写入,等待 I/O 完成。如果页面不在内存中,选择一个空闲槽位。从磁盘读取页面数据到槽位。更新页面状态并返回槽号。

于巍,花名漠雪,移动云数据库技术委员会主任,海山数据库研发负责人,PG中文社区常委,PG中文社区海外联络人。15年数据库内核研发经验,4年美国、以色列等海外研发经历,华为GaussDB、阿里云PolarDB、移动云He3DB等核心架构 1114

SAP-ABAP:SAP数据库视图(Database View)详解-创建

数据库视图是SAP中实现多表关联查询的基础工具,适合简单的跨表查询和权限控制场景。但其功能有限,对于复杂逻辑或高性能需求,建议结合CDS视图或ABAP程序开发。通过合理设计,数据库视图可显著提升开发效率和系统可维护性。它存储在数据库中,但本身不存储数据,仅通过查询动态生成结果。是一种基于物理数据库表的虚拟表,通过关联多个表(使用。

baidu_35680696的博客 1369

20、基于图神经网络的脱氢焓预测方法研究

本文研究了基于图神经网络(GNN)的液态有机氢载体(LOHC)材料脱氢焓预测方法。通过分析现有GNN方法的局限性,提出了一种新的聚合自节点表示(AWS)方法,并结合丰富的原子特征和集成学习策略,显著提高了预测性能。实验结果表明,AWS在脱氢焓预测和多个基准化学性质预测任务中均优于现有GNN方法。此外,基于分子结构的集成方法进一步提升了模型的鲁棒性和准确性。研究展示了该方法在筛选LOHC材料中的潜力,并为未来预测更多化学性质奠定了基础。

pp12345的博客 103

速来了解!大云海山数据库考试认证即将开启

中国移动自主研发的“大云海山数据库”获得国家安全可靠认证,成为国内电信运营商首款通过该项测评的数据库产品,标志着我国在数据库领域的自主创新取得重要突破。近日,中国信息安全测评中心与国家保密科技测评中心联合发布《安全可靠测评结果公告(2025年第2号)》,中国移动自主研发的移动云大云海山数据库(He3DB for PostgreSQL V2.0)获得认证。这是国内电信运营商首款通过“安全可靠测评”的数据库产品,彰显了中国移动在数据库核心技术、安全保障、售后维护和持续发展方面的实力。

huanhuanzhou blog 747

【2026年阿里巴巴集团暑期实习- 4月25日-算法岗-第二题- 矩阵计数】(题目+思路+Java&C++&Python解析+在线测试)

摘要: 给定两个非负整数序列a和b,构造n×m矩阵C,其中C[i][j]=a[i]×b[j]。统计矩阵中元素≥k的数量。解法是先对数组b排序,然后对于每个a[i],若k=0则直接累加m;若a[i]=0且k>0则跳过;否则计算需要的最小b[j]值,在排序后的b中使用二分查找确定满足条件的元素数量。时间复杂度为O((n+m)log m),空间复杂度O(1)。代码实现了排序和二分查找的高效组合。

m0_73659489的博客 65

大云海山数据库(He3DB)兼容 MySQL 日期函数:DATE_ADD的内核实现与复合间隔支持

本文针对大云海山数据库(He3DB)兼容MySQL生态时缺乏DATE_ADD和DATE_SUB函数的问题,提出了一种内核级解决方案。通过在语法解析器和时间处理模块中新增C函数,实现了对MySQL特有的11种复合时间间隔格式的完整支持。该方案采用"语法扩展+格式转换+原生运算"的三层架构,成功实现了与MySQL完全兼容的时间运算功能,显著降低了数据库迁移成本,为异构数据库兼容提供了可复用的技术范式。

weixin_43544348的博客 1218

【android bluetooth 案例分析 01】【HiCar 详解 3】【hicar时如何交换Wifi参数的】

如果直接使用 L2CAP(不经过 RFCOMM),会需要额外的协议来保证可靠性,而 RFCOMM 天然支持。BLE 广播的数据长度受限(31 字节 / 255 字节扩展),不适合传输复杂的 Wi-Fi 连接参数。使用 RFCOMM 传输参数,可以兼容不同厂商的车机和手机,而无需依赖特殊的蓝牙功能。手机解析这些参数,并使用 Wi-Fi Direct 连接到车机。,然后才能让 Wi-Fi Direct 进行真正的数据传输。,适合传输 Wi-Fi 连接参数等关键数据。,可以安全地交换 Wi-Fi 连接信息。

奔跑吧 android 的博客 1740

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

大云海山数据库(He3DB)AutoVacuum源码解析

AutoVacuum是数据库基于MVCC(多版本并发控制)机制设计的自动化维护功能,其核心价值在于解决MVCC带来的固有问题,规避手动维护短板,保障数据库长期稳定运行,具体原因如下:1、 解决表膨胀问题:数据库执行update/delete操作时,不会直接删除旧元组,仅标记为“死元组”以保障并发事务可见性。这些死元组长期堆积会占用大量磁盘空间,导致表和索引体积膨胀,大幅增加查询扫描范围,降低执行效率,AutoVacuum可及时清理此类无效数据。

weixin_43544348的博客 729

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

大云海山数据库(He3DB)源码详解:He3DB-CLOG日志管理器函数之TransactionIdGetStatus

函数名作用实现CLOG日志的读操作。

weixin_51457815的博客 418

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

移动云大云海山数据库(He3DB)B树索引

B树索引是数据库使用场景中最常见的索引。移动云大云海山数据库的B树索引实际上是一种B+树。本文主要介绍数据库的B树索引页面、B树索引结构,以及B树索引创建和插入的过程。在src/backend/access/nbtree/nbtree.c的函数bthandler中,可以找到B树索引的所有入口函数。索引创建:btbuild索引插入:btinsert索引删除:btbulkdelete、btvacuumcleanup。

weixin_43544348的博客 690

移动云大云海山数据库(He3DB)与PolarDB架构深度对比(一)

本文聚焦二者核心架构能力,从技术演进、整体架构、存储设计、数据访问、持久化、数据一致性六大核心维度,深度拆解海山数据库与PolarDB的底层实现差异、技术选型思路及各自优劣,为企业数据库技术选型、架构设计提供可落地的实操性参考。基于存储架构的差异点,后续将继续拆解海山数据库与PolarDB架构上的区别,分别从数据访问、数据持久化、数据一致性等数据库基本能力表现出发,详细介绍两者的差异,以体现其架构上的不同。对标研发+本土化适配,紧跟行业技术路线,实现核心能力对标,适配通用部署场景。

weixin_43544348的博客 551
上一篇: 大云海山数据库(He3DB)源码详解:He3DB-SubTrans日志管理器函数之SubTransGetParent、SubTransGetTopmostTransaction
下一篇: 大云海山数据库(He3DB)源码详解:MVCC可见性HeapTupleSatisfiesSelf函数
DAWN1221
博客等级 码龄7年 893粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值