PostgreSQL 技术内幕(十)WAL log 模块基本原理

事务日志是数据库的重要组成部分,记录了数据库系统中所有更改和操作的历史信息。 WAL log(Write Ahead Logging)也被称为xlog,是事务日志的一种,也是关系数据库系统中用于保证数据一致性和事务完整性的一系列技术,在数据库恢复、高可用、流复制、逻辑复制等模块中扮演着极其重要的角色。

在这次直播中,我们为大家介绍了WAL log模块的基本原理、构成和特性。以下内容根据直播文字实录整理而成。

WAL log简介

数据库在写入或更新资料时,要确保事务始终保持ACID的特性。当系统发生故障时,数据库通过事务日志回放来保证故障恢复后数据不丢失。

图片

图1:单机WAL log流程示意图

如图1所示,在单机场景下,如果每一次写入或更新都直接去写表文件,单次更新表文件的代价相对高昂,对于硬盘来说随机写的性能也会非常差。此时,可以通过引入缓冲池(Buffer Pool),将数据写入内存中。相比直接写表文件,这种方式的性能更高。

同时,为了保证数据的持久化,需要引入WAL log:在内存更新前,先写入WAL log,再更新内存。在这种情况下,即使出现了断电或故障等情况,也能准确地恢复数据,保证了数据库的ACID。

相比直接去更新表文件,WAL log代价更小,执行路径更短。在PostgreSQL中,WAL log的写入也属于随机写。

图片

图2:联机WAL log流程示意图

除此之外,WAL log在联机场景下还可以支持主从同步,以及热备份等功能。

以Greenplum为例,如果没有引入WAL log ,主从之间需要约定好一份同步/备份的协议,或者是在从节点执行同样的SQL语句,这样不仅操作复杂,而且很难做到热切换。

在引入WAL log之后,主从节点之间直接同步WAL log,就能够保证数据的一致性。当主节点发生故障时,从节点也能快速地通过相应的WAL log重放,让数据恢复到可使用的状态,整个过程操作更为简便

WAL log实现方式

不同的数据库对WAL log实现的需求点也有所区别,主要体现在四个方面:

  • 首先是格式,一般由meta+data两个部分组成。meta部分记录了关联资源的元信息,data是资源自定的裸数据。meta和data可以分开存储,也可以统一存储。分开存储时,单条WAL log需要先读取完整的meta,再按需求解data;统一存储时,可以一条条解。举个例子,在分开存储时,数据组成往往是meta1+meta2.. metaN+data1+data2...dataN;而在统一存储时,数据组成往往是meta1+data1+meta2+data2...metaN+dataN。
  • 其次,在修改数据时有undo log和redo log两种方式。undo log从后往前写,redo log从前往后写。PostgreSQL采用的是redo log。
  • 此外,循环校验码信息(CRC)分为完整数据和分段数据两种。分段CRC的优点是当出现错误时,能够快速定位到坏的块数据,且损坏的范围很小,但代价是速度较慢;相比之下,完整数据的CRC读写速度更快,但如果单个meta损坏,则可能导致整个WAL log都损坏,恢复成本较高。
  • 最后,是否需要落盘,这主要取决于具体场景,如果只做同步和备份,可以考虑不落盘。

WAL log的组成

在PostgreSQL中,WAL log由头部、块头部、块私有数据块、自定义资源数据块四部分组成。

图片

图3:PostgreSQL中WAL log构成图

头部和块头部,相当于上面提到的meta,主要用于数据块的快速定位、数据块的描述以及对数据块CRC操作等。其中,块头部是私有的,需要和page绑定。而块私有数据和WAL log本身数据属于data部分,用于存储具体的数据。

在WAL log本身数据中,初始化资源管理器rmgr(Resource managers definition)是自定义资源的主要载体,也是WAL log数据块内容的生产与消费者

WAL log checkpoint

WAL log在执行过程中,数据量会不断地累积,当达到一定数量后,会对系统性能产生影响,因此需要定时清理WAL log数据。

清理页缓存和xlog文件需要借助checkpoint(检查点)机制。执行checkpoint 之后,页缓存可以被清空,这样可以保证不会因为页缓存太大而导致性能下降。

checkpoint的主要作用包括脏数据块回写、xlog回收(非archive xlog 且已同步的 xlog)和checkpoint redo

通常触发checkpoint的时机主要有包括按时定期清理、数据最大长度限制、checkpoint语句、数据库关闭在内的四种场景。当然在其他场景下,也可能会触发checkpoint,这里不再一一列举。

自动checkpoint指的是按照一定的时间间隔执行checkpoint命令,时间间隔在PostgreSQL.conf文件中可以配置,默认是5分钟。

WAL log recovery与replay

如图4所示,在GPDB中,数据恢复的过程包含了数据重放。数据库启动时,会有startup进程打开checkpoint redo文件,开始按顺序读取xlog,进行恢复操作。

图片

图4:recovery流程示意图

在联机场景下,primary/master集群完成数据恢复后,会退出recovery,这时WAL sender进程仍会不断会向从节点发送xlog信息。 此时,在mirror/standby集群中 startup进程则不会退出,而是会通过WAL receiver不断地接收xlog信息,并在startup进程中进行replay操作。

图片

图5:replay操作流程示意图

如图5所示,备库不断地从主库同步相应的日志数据,并在备库应用每个WAL record,流复制每次传输WAL日志的record;主库启动WAL sender进程,主要负责将主服务器产生的WAL日志记录发送给从库。

相应地,从库启动WAL receiver进程,与对应的WAL sender进程通讯,负责接收主库发送的WAL日志记录;同时,从库启动startup进程,负责将WAL receiver进程接收到WAL日志记录在从库上replay,从而达成主从的数据同步。在GPDB中,默认支持同步复制,同时也支持异步复制。

示例:insert场景下WAL log的变化

图6为在insert(单条数据)场景下,WAL log的变化,感兴趣的读者可以对应着图中标注的函数名来调试代码。

图片

图6:insert场景下WAL log的变化

Custom WAL Resource Managers特性

在此前的PostgreSQL版本中,rmgr是一个静态的enum。如果要增加新的Resource Managers,需要在内核里去定义。

在PostgreSQL 15中,xlog模块支持了Custom WAL Resource Managers 的新改动,支持动态注册的结构,且新加了一些回调函数。

Custom WAL Resource Managers支持外部extension动态添加自定义的资源类型,比如在extension中实现的 table access method 或index access method。

目前,HashData的企业级产品系列已经全面支持PostgreSQL 15的新特性,后续HashData会不断完善相关功能,进一步提升产品可用性。

总结

PostgreSQL中的WAL机制的核心思想是:先日志落盘,后数据落盘。在写数据到磁盘里成为固定数据之前,先写入到日志里。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/86682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

若依前后端分离版搭建记录

一、如果是mysql8,得修改一下参数allowPublicKeyRetrieval为true,不然会报Public Key Retrieval is not allowed错误: 二、导入第二张表的数据库的时候,需要增加“--default-character-setutf8”参数才不会报错:

硕士应聘大专老师

招聘信息 当地人社局、学校(官方) 公众号(推荐): 辅导员招聘 厦门人才就业信息平台 高校人才网V 公告出完没多久就要考试面试,提前联系当地院校,问是否招人。 校招南方某些学校会直接去招老师。…

DL2:A Deep Learning-Driven Scheduler for Deep Learning Clusters 阅读思考+组会

IEEE Transactions on Parallel and Distributed Systems CCF A 提问题记录 1、自己提出的问题 1.1 这篇文章解决的主要问题是什么,怎么理解? 传统的调度方法具有如下特点: 要么无法感知机器学习工作负载特性(如集群中的GPU的利用率)或ML…

Vue中的插槽--组件复用,内容自定义

插槽 文章目录 插槽插槽-默认插槽插槽-后备内容(设置默认值)插槽-具名插槽插槽–作用域插槽 插槽-默认插槽 作用:让组件内部的一些结构支持自定义 需求:要在页面中显示一个对话框,封装成一个组件(对话框有很多功能是类…

antd/fusion表格增加圈选复制功能

背景介绍 我们存在着大量在PC页面通过表格看数据业务场景,表格又分为两种,一种是 antd / fusion 这种基于 dom 元素的表格,另一种是通过 canvas 绘制的类似 excel 的表格。 基于 dom 的表格功能丰富较为美观,能实现多表头、合并…

Spring之bean的生命周期源码解析

Spring最重要的功能就是帮助程序员创建对象(也就是IOC),而启动Spring就是为创建Bean对象做准备,所以我们先明白Spring到底是怎么去创建Bean的,也就是先弄明白Bean的生命周期。 Bean的生命周期就是指:在Spr…

Nodejs 相关知识

Nodejs是一个js运行环境,可以让js开发后端程序,实现几乎其他后端语言实现的所有功能,能够让js与其他后端语言平起平坐。 nodejs是基于v8引擎,v8是Google发布的开源js引擎,本身就是用于chrome浏览器的js解释部分&#…

帆软FineReport决策报表之页面布局

最近在用帆软决策报表绘制首页大屏,记录使用过程,方便查看。 版本:FineReport10.0 第一步、页面布局 页面布局其实就是组件的排列组合,决策报表主区域body有两种布局方式:自适应布局和绝对布局。 1)自适应…

第一百五十三回 如何实现滑动窗口

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了自定义组件实现游戏摇杆相关的内容,本章回中将介绍 如何实现滑动窗口.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的滑动窗口表示在屏幕底部向上滑动时弹出一个窗口&a…

【Unity3D赛车游戏制作】开始界面场景搭建

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

SpringSecurity授权

目录 一、RABC的介绍 二、权限表设计 三、编写权限控制方法 (1)mapper接口 (2)映射文件 (3)修改认证逻辑 四、配置类访问资源 五、自定义访问控制逻辑 (1)自定义 &#xf…

LeakCanary 源码详解(3)

上一篇:LeakCanary源码详解(2) 如果你是直接刷到这篇的,建议还是从1开始看,然后2,然后是这篇3,如果你只关注这篇的重点hprof 文件定位泄漏位置的感兴趣,可以试试直接读这篇&#xff…

23种设计模式

目录 一、设计模式学前导读 1、代码质量好坏如何评价 ? 2、编程方法论 二、设计模式概述 设计模式的产生 UML图 三、六大设计原则 1、单一职责原则(Single Responsibitity Principle) 2、开放封闭原则(Open Close Principle&#x…

利用亚马逊 云服务器 EC2 和S3免费套餐搭建私人网盘

网盘是一种在线存储服务,提供文件存储,访问,备份,贡献等功能,是我们日常中不可或缺的一种服务。很多互联网公司都为个人和企业提供免费的网盘服务。但这些免费服务都有一些限制,比如限制下载速度&#xff0…

win10系统 C++环境 安装编译GRPC

第一步 下载源码、更新、cmake编译: 为了依赖的成功安装,采用gitee进行下载与更新。记得需要安装git软件。 安装命令: 在自己指定的目录下,鼠标右键,选择 git Bash Here 打开命令行 git clone -b v1.34.0 https://gi…

中秋国庆内卷之我爱学习C++

文章目录 前言Ⅰ. 内联函数0x00 内联函数和宏的比较0x01 内联函数的概念0x02 内联函数的特性 Ⅱ. auto(C 11)0x00 auto的概念0x01 auto的用途 Ⅲ. 范围for循环(C11)0x00 基本用法0x01 范围for循环(C11)的使用条件 Ⅳ. 指针空值nullptr(C11)0x00 概念 前言 亲爱的夏…

Flutter实现PS钢笔工具,实现高精度抠图的效果。

演示: 代码: import dart:ui;import package:flutter/material.dart hide Image; import package:flutter/services.dart; import package:flutter_screenutil/flutter_screenutil.dart; import package:kq_flutter_widgets/widgets/animate/stack.dart…

【Vue】快速入门和生命周期

目录 前言 一、vue的介绍 1. Vue.js是什么? 2. 库和框架的区别 3.基本概念和用法: 二、MVVM的介绍 1. 什么是MVVM? 2. MVVM的组成部分 3. MVVM的工作流程 4. MVVM的优势 5. MVVM的应用场景 三、vue实例 1.模板语法: …

智慧公厕是提升公共厕所管理服务能力的创新举措

在城市化进程加速的今天,公共厕所的管理问题成为让人头疼的难题。随着智慧科技的发展,智慧公厕应运而生,为提升公共厕所综合管理服务能力提供了新思路和解决方案。本文将以智慧公厕领先厂家广州中期科技有限公司,大量精品案例项目…

卡尔曼滤波(Kalman Filter)原理浅析-数学理论推导-4

目录 前言数学理论推导1. 直观理解与二维实例2. EKF3. 补充知识-线性化结语参考 前言 最近项目需求涉及到目标跟踪部分,准备从 DeepSORT 多目标跟踪算法入手。DeepSORT 中涉及的内容有点多,以前也就对其进行了简单的了解,但是真正去做发现总是…