非易失性WAL buffer实现解析(五)

本文涉及的产品
云解析DNS-重点域名监控,免费拨测 20万次(价值200元)
简介: 非易失性WAL buffer实现解析(五)

本文接着介绍非易失性WAL buffer对StartupXLOG流程的改造。

1StartupXLO流程中,当WAL日志回放完退出回放循环后,对其进行改造

2ControlFile->discardedUpTo为新增加的变量,表示这个节点之前的WAL段文件可以回收了,这个位点以WAL段文件大小为单位。

3)如果EndOfLog<=discardedUpTo,即最后的回放的位置在需要回收的范围内:此时将整个NVM WAL BUFFER0并持久化到nvm介质,同时更新ControlFile->discardedUpTo为初始值并写到pg_control文件

4)如果EndOfLog>discardedUpTo:需要重新初始化XLogCtl->xlblocks数组,即如下图所示,discardedUpTo的位置开始+一页大小作为XLogCtl->xlblocks[idx+1],依次类推直到最后位置

5)如果EndOfLog位于一页中间,即不在页边界上:需要将xlogreader->readBuf即最后回放的WAL页有效内容拷贝到EndOfLog所在页,并将剩余内容清0,然后调用nv_persist将该页内容持久化到NVM,如下图最后一个block所示。并再初始化最后一个XLogCtl->xlblocks[]数组,及初始化位置XLogCtl->InitializedUpTo为末尾处。

6)如果EndOfLog位于页边界上:XLogCtl->InitializedUpTo = EndOfLog;,将初始化位置保存为EndOfLog

7)接着需要对LogwrtResultXLogCtl->LogwrtResult处理

8)最后需要预分配一个XLOG文件。如果是NVM wal BUFFER,则需调用PreallocNonVolatileXlogBuffer函数,否则调用PreallocXlogFiles。对于NVM WAL BUFFER的预分配,下篇文章接着介绍


目录
相关文章
|
缓存 NoSQL Java
千万级电商线上无阻塞双buffer缓冲优化ID生成机制深度解析
【11月更文挑战第30天】在千万级电商系统中,ID生成机制是核心基础设施之一。一个高效、可靠的ID生成系统对于保障系统的稳定性和性能至关重要。本文将深入探讨一种在千万级电商线上广泛应用的ID生成机制——无阻塞双buffer缓冲优化方案。本文从概述、功能点、背景、业务点、底层原理等多个维度进行解析,并通过Java语言实现多个示例,指出各自实践的优缺点。希望给需要的同学提供一些参考。
229 8
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
382 5
|
存储 关系型数据库 MySQL
MySQL Change Buffer 深入解析:概念、原理及使用
MySQL Change Buffer 深入解析:概念、原理及使用
MySQL Change Buffer 深入解析:概念、原理及使用
|
缓存 关系型数据库 MySQL
MySQL Buffer Pool 解析:原理、组成及作用
MySQL Buffer Pool 解析:原理、组成及作用
|
存储 关系型数据库 MySQL
MySQL Doublewrite Buffer(双写缓冲区)深入解析:原理及作用
MySQL Doublewrite Buffer(双写缓冲区)深入解析:原理及作用
|
缓存 算法 安全
深入解析InnoDB的Buffer Pool
深入解析InnoDB的Buffer Pool
214 2
|
JavaScript 网络协议 数据处理
Node.js中的Buffer与Stream:深入解析与使用
【4月更文挑战第30天】本文深入解析了Node.js中的Buffer和Stream。Buffer是处理原始数据的全局对象,适用于TCP流和文件I/O,其大小在V8堆外分配。创建Buffer可通过`alloc`和`from`方法,它提供了读写、切片和转换等操作。Stream是处理流式数据的抽象接口,分为可读、可写、双工和转换四种类型,常用于处理大量数据而无需一次性加载到内存。通过监听事件和调用方法,如读取文件的可读流示例,可以实现高效的数据处理。理解和掌握Buffer及Stream能提升Node.js应用的性能。
|
9月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
876 29
|
9月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
357 4
|
9月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

推荐镜像

更多
  • DNS