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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 非易失性WAL buffer实现解析(一)

前文简要介绍了非易失性WAL buffer的PostgreSQL email,本文开始主要介绍其实现机制。

       non-volatile WAL buffer同样是结合interl开发的pmdk库进行适配NVM。在启动时在函数XLOGShememInit中通过调用MapNonVolatileXLogBuffer在NVM介质上创建WAL BUFFER文件并映射到内存,这个动作由pmdk函数pmem_map_file完成。其中,NvwalPath为文件路径,NvwalSize为WAL buffer大小,这两个函数入参由新增的参数nvwal_path和nvwal_size来传入。

本文主要介绍日志刷新时的改造。由函数XLogFlush完成,该函数完成的功能是,将指定位置record的lsn前的所有日志都刷新到磁盘,对应NVM新硬件是将该lsn之前所有的日志都持久化到NVM上。主要步骤:

1)XLogCtl->persistentUpTo表示已经持久化NVM的lsn位置,record<XLogCtl->persistentUpTo表示要求的位置已经都持久化到NVM了,不需要再进行持久化,直接退出。

2)record-XLogCtl->persistentUpTo > NvwalSize表示需要持久化的WAL充满了整个WAL BUFFER,所以直接调用nv_flush将整个NVM WAL BUFFER刷到NVM,整个动作最终由pmdk函数pmem_flush完成,表示将CPU CACHE的刷到NVM。

3)record-XLogCtl->persistentUpTo < NvwalSize则需要分情况。因为NVM WAL buffer大小固定,而WAL日志是不断增长的,所以NVM WAL BUFFER循环使用。那么将分为两种情况:uptopos > frompos和uptopos < frompos。如下图所示,分别将红色区间部分通过nv_flush即pmem_flush函数刷到NVM。然后,由于CPU CACHE刷的无序性,需要调用nv_drain即pmdk函数pmem_drain确保CPU CACHE所有的东西都刷到NVM,本质上是个内存屏障。

4)最后需要通知WAL sender进程有新WAL日志了,可以将这些WAL日志发送备机了。

目录
相关文章
|
3月前
|
存储 关系型数据库 MySQL
MySQL Change Buffer 深入解析:概念、原理及使用
MySQL Change Buffer 深入解析:概念、原理及使用
MySQL Change Buffer 深入解析:概念、原理及使用
|
3月前
|
缓存 关系型数据库 MySQL
MySQL Buffer Pool 解析:原理、组成及作用
MySQL Buffer Pool 解析:原理、组成及作用
|
3月前
|
存储 关系型数据库 MySQL
MySQL Doublewrite Buffer(双写缓冲区)深入解析:原理及作用
MySQL Doublewrite Buffer(双写缓冲区)深入解析:原理及作用
|
4月前
|
缓存 算法 安全
深入解析InnoDB的Buffer Pool
深入解析InnoDB的Buffer Pool
52 2
|
4月前
|
JavaScript 网络协议 数据处理
Node.js中的Buffer与Stream:深入解析与使用
【4月更文挑战第30天】本文深入解析了Node.js中的Buffer和Stream。Buffer是处理原始数据的全局对象,适用于TCP流和文件I/O,其大小在V8堆外分配。创建Buffer可通过`alloc`和`from`方法,它提供了读写、切片和转换等操作。Stream是处理流式数据的抽象接口,分为可读、可写、双工和转换四种类型,常用于处理大量数据而无需一次性加载到内存。通过监听事件和调用方法,如读取文件的可读流示例,可以实现高效的数据处理。理解和掌握Buffer及Stream能提升Node.js应用的性能。
|
内存技术
非易失性WAL buffer实现解析(五)
非易失性WAL buffer实现解析(五)
50 0
非易失性WAL buffer实现解析(三)
非易失性WAL buffer实现解析(三)
43 0
|
13天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
1月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
52 6
|
2天前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析

热门文章

最新文章

推荐镜像

更多