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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 非易失性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的预分配,下篇文章接着介绍


目录
相关文章
|
18天前
|
缓存 NoSQL Java
千万级电商线上无阻塞双buffer缓冲优化ID生成机制深度解析
【11月更文挑战第30天】在千万级电商系统中,ID生成机制是核心基础设施之一。一个高效、可靠的ID生成系统对于保障系统的稳定性和性能至关重要。本文将深入探讨一种在千万级电商线上广泛应用的ID生成机制——无阻塞双buffer缓冲优化方案。本文从概述、功能点、背景、业务点、底层原理等多个维度进行解析,并通过Java语言实现多个示例,指出各自实践的优缺点。希望给需要的同学提供一些参考。
40 7
|
2月前
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
|
6月前
|
存储 关系型数据库 MySQL
MySQL Change Buffer 深入解析:概念、原理及使用
MySQL Change Buffer 深入解析:概念、原理及使用
MySQL Change Buffer 深入解析:概念、原理及使用
|
6月前
|
缓存 关系型数据库 MySQL
MySQL Buffer Pool 解析:原理、组成及作用
MySQL Buffer Pool 解析:原理、组成及作用
|
6月前
|
存储 关系型数据库 MySQL
MySQL Doublewrite Buffer(双写缓冲区)深入解析:原理及作用
MySQL Doublewrite Buffer(双写缓冲区)深入解析:原理及作用
|
7月前
|
缓存 算法 安全
深入解析InnoDB的Buffer Pool
深入解析InnoDB的Buffer Pool
73 2
|
7月前
|
JavaScript 网络协议 数据处理
Node.js中的Buffer与Stream:深入解析与使用
【4月更文挑战第30天】本文深入解析了Node.js中的Buffer和Stream。Buffer是处理原始数据的全局对象,适用于TCP流和文件I/O,其大小在V8堆外分配。创建Buffer可通过`alloc`和`from`方法,它提供了读写、切片和转换等操作。Stream是处理流式数据的抽象接口,分为可读、可写、双工和转换四种类型,常用于处理大量数据而无需一次性加载到内存。通过监听事件和调用方法,如读取文件的可读流示例,可以实现高效的数据处理。理解和掌握Buffer及Stream能提升Node.js应用的性能。
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
67 2
|
2月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
76 0
|
2月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
57 0

推荐镜像

更多