openGauss内存引擎WAL实现

本文深入探讨了openGauss内存引擎MOT的WAL(Write-Ahead Logging)实现,包括WAL的整体架构、事务操作记录、RedoLogBuffer、RedoLogHandler和XLog的详细流程。WAL确保数据持久性,事务日志通过RedoLogBuffer先写入内存,然后由RedoLogHandler提交给XLog,最终写入WALsegment文件。文章还介绍了不同类型的DDL和DML操作日志记录格式,以及不同模式的RedoLogHandler的工作原理。

作者介绍:飞你莫属

原文链接:openGauss内存引擎WAL实现

1. 简介

WAL(Write Ahead Logging)是业界通用的保证数据durability的方法,它的基本思想是:数据更新(表数据或者索引数据等的更新)只能在这些更新被写入日志文件并且flush之后才能完成。openGauss内存引擎MOT(Memory Optimized Table)也不例外。本文将从以下几个方面分析MOT WAL的实现:

  • WAL整体架构
  • 事务操作记录
  • RedoLogBuffer
  • RedoLogHandler
  • XLog

2. 整体架构

MOT WAL的整体架构如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6RMH8l6x-1611141466966)(0.png)]

事务记录WAL日志的过程如下:

  • 组装生成事务相关的操作记录
  • 将事务相关的操作记录写入基于内存的RedoLogBuffer
  • 当RedoLogBuffer写满或者事务没有更多的日志记录要写入RedoLogBuffer的时候,就会将该RedoLogBuffer提交给RedoLogHandler
  • RedoLogHandler将日志记录提交给XLog
    • 在XLog中先写WAL Log Buffer
    • 在合适时机,将WAL Log Buffer中的数据写入WAL segment文件

3. 事务操作记录

MOT写入WAL的是redo log,其格式如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NPu6tt5O-1611141466969)(1.png)]

redo log主要由3部分组成:

  • DDL操作日志区:当前事务中所有DDL相关的操作(如CreateTable,DropTable,CreateIndex,DropIndex)的日志记录保存在这里
  • DML操作日志区:当前事务中所有DDL相关的操作(如Insert,update,delete)的日志记录保存在这里
  • EndBlock:标记当前事务日志记录部分结束或者全部结束

对于不同的DDL操作(如CreateTable,DropTable,CreateIndex,DropIndex)或者DML操作(如Insert,update,delete)的操作记录,其格式不尽相同,下面会逐一讲述。

EndBlock包括2种,分别是用于标记当前事务日志记录部分结束的PartialRedoTx记录和用于标记当前事务日志记录全部结束的CommitTx记录。

3.1 DDL操作日志记录

CreateTable日志记录

在这里插入图片描述

DropTable日志记录

在这里插入图片描述

CreateIndex日志记录

### openGauss MOT 存储引擎概述 openGauss 的 MOT (Memory-Optimized Table) 是一种高性能的内存优化存储引擎,它与传统的基于磁盘的存储引擎共同构成了 openGauss 数据库的核心组件之一[^1]。MOT 提供了一种全新的方式来管理和操作高度性能敏感的数据集,通过将这些数据加载到内存实现极高的吞吐量和低延迟响应。 #### MOT 和传统存储引擎的区别 在 openGauss 架构中,存在两种主要类型的存储引擎:基于磁盘的传统存储引擎以及面向内存优化的 MOT 引擎[^3]。两者均依赖于统一的日志记录机制(Write-Ahead Logging, WAL),并通过共享相同的日志设备完成持久化操作。这种设计使得用户能够灵活选择适合其工作负载特性的存储方案,并享受一致的操作体验。 --- ### MOT 存储引擎的工作原理 MOT 的高效不仅仅来源于它的运行环境位于物理 RAM 中这一事实;更重要的是,该引擎针对现代多核处理器架构下的高并发场景做了深入优化[^4]。以下是几个关键方面: 1. **并发控制** - 动态锁管理器被重新定义以适应随机访问模式下频繁发生的事务冲突情况。 - 实现细粒度锁定策略减少等待时间提高整体效率。 2. **数据结构设计** - 高效索引技术如哈希表或跳表用于加速查找过程。 - 列式布局进一步增强了批量读取时 CPU 缓存命中率从而降低平均延时。 3. **垃圾回收机制** - 自动化的版本清理流程确保长期稳定运行期间不会因为旧版本残留而影响新请求处理速度。 4. **持久化保障** - 虽然大部分活动发生在易失性介质之上,但是借助写前日志(WAL),即使发生意外断电也能快速恢复至最近提交状态。 ```python # 示例代码展示如何创建一张 MOT 表 CREATE TABLE mot_table ( id INT PRIMARY KEY, name VARCHAR(50), age SMALLINT ) USING mot; ``` 上述 SQL 语句展示了怎样声明一个使用 MOT 技术支撑的新关系型表格实例。注意这里特别指定了 `USING mot` 关键字表明此对象应由内存优化子系统负责维护而非默认文件系统映射路径上的常规方法论所管辖范围之内[^2]。 --- ### 使用指南 当决定采用 MOT 来承载某些特定业务逻辑单元之前,请务必考虑以下几个因素以便做出明智决策: - **成本效益分析**: 将热数据迁移到更昂贵但也更快捷的位置总是伴随着额外支出考量;因此只有那些真正需要亚毫秒级反应能力的任务才值得投入相应资源. - **容量规划**: 明确知晓当前硬件设施所能提供的最大可用RAM总量之后再分配给各个应用程序模块以免造成争抢现象进而拖累全局表现. - **灾难恢复计划制定**: 即使有了完善的WAL保护措施仍需定期备份重要资料以防万一遭遇不可预见的重大事故导致原始副本丢失无法挽回损失. 最后提醒一点就是尽管理论上讲任何规模大小都可以尝试切换成全内存模式运作但实际上对于超大规模集群而言可能还需要更多定制开发才能达到理想效果所以建议从小试点项目起步逐步积累经验教训最终推广开来形成规模化效应. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值