1分钟了解,预写日志WAL的核心思路...

上一篇《刷盘,还是不刷盘,是一个问题》中我们遇到了哪些问题?

1. 已提交事务+未提交事务的ACID特性怎么保证?

画外音:上一篇中遇到的问题,主要是原子性与持久性。

2. 数据库崩溃,怎么实施故障恢复?

3. 每次都刷盘随机写,性能低,怎么提高数据库性能?

画外音:正常情况下,不需要每个事务提交,都进行刷盘。

要提升随机写性能,最容易想到的,就是利用高性能的顺序写日志,记录事务中的一些信息,来实现已提交事务的数据“要刷盘”,未提交事务的数据“不刷盘”,以及实现故障恢复。

这个顺序写的日志,记录什么内容呢?

事务中,对数据库的写操作。

如何来标识写操作的时序呢?

每条日志记录会有一个递增的日志序列号(log sequence number,LSN),唯一标识一条日志记录。

还有一种特殊的日志记录,叫检查点(checkpoint)。

检查点记录了某一个时刻,缓冲池(buffer pool)中所有数据页(page)的状态信息。

有了检查点和顺序写日志,我们就可以通过:

1. 重放(redo)已提交事务的操作;

2. 取消(undo)未提交事务的操作;

3. 顺序写替代随机写;

来解决,上面提到的三大难题。

这,就是我们今天要聊的核心技术,预写日志(write-ahead logging,WAL)。

预写日志不仅仅是一种日志,更像是一种模式,一种协议,它要求在进行数据写入操作时,必须先写入操作日志。

预写日志的分层结构是怎么样的?

如同数据的内存-磁盘两层结构一样,为了提升性能,预写日志也分为内存-磁盘两层结构:

1. 内存层:WAL buffer

2. 磁盘层:WAL log file

预写日志会记录哪些信息呢?

还是之前那个事务T1:

1. 开始事务

2. 读取记录A的值(假设A=1)

3. 修改记录A的值(假设修改为2)

4. 提交事务

73f675f33c28f15d421cef4a51d8d8c6.png

预写日志首先会记录,T1事务开始

LSN=0:<T1, BEGIN>

读取A的值是一个读操作,不需要进行记录。

修改记录A的值是一个写操作,需要进行记录,而且要记录修改前的值,与修改后的值,类似于:

LSN=1:<T1, A, 1, 2>

以方便未来进行redo与undo(如上图中的屎黄色1)。

接下来,事务会对缓冲池中的数据进行修改(如上图中的屎黄色2)。

到目前为止,预写日志都还是写在buffer中,并没有刷到磁盘上。

事务提交时,预写日志,以及缓冲池会发生什么?

首先,T1事务提交,也会记录到buffer中:

LSN=2:<T1, COMMIT>

但这样,还远远不够。

ef15768eca3d33b467b81371289f46d8.png

预写日志,必须全部从buffer里刷到磁盘上,也就是日志文件中,事务才能标记上“已提交”,并返回给应用程序。

没错,只要预写日志从buffer刷到磁盘,而不需要数据从buffer刷到磁盘,就能返回应用程序,事务提交成功。

至于数据什么时候从buffer刷回磁盘,这取决于缓冲池刷盘策略,例如:隔一段时间异步刷盘(如上图中的屎黄色便签)。

这,就是预写日志的核心思路。

总结与思考:

1. 日志序列号(log sequence number,LSN),唯一标识一条日志记录,递增;

2. 检查点(checkpoint),记录了某一个时刻,缓冲池(buffer pool)中所有数据页(page)的状态信息。

3. 预写日志记录什么核心信息?

 - 事务开始

 - 事务结束(提交/回滚)

 - 事务的写操作,修改前/修改后的值

4. 数据库何时能向应用程序返回“事务成功”?

预写日志刷盘成功之后。

5. 上一篇《刷盘,还是不刷盘,是一个问题》结尾的问题:在数据库返回应用程序事务成功之前,要不要将数据刷回磁盘?

只要有预写日志机制,只需要预写日志刷盘,不需要数据刷盘。

新的场景出现了:如果数据库崩了,怎么利用检查点(checkpoint)以及预写日志,来进行刷盘和数据恢复呢?让你来设计,你会怎么做?

上一篇《刷盘,还是不刷盘,是一个问题》的阅读好惨淡,技术内容看来确实没啥人看了。大伙帮忙三连支持下,感谢。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新声创新20年:无线技术给助听器插上“娱乐”的翅膀

听力损失并非现代人的专利&#xff0c;古代人也会有听力损失。助听器距今发展已经有二百多年了&#xff0c;从当初单纯的声音放大器到如今的全数字时代助听器&#xff0c;助听器发生了翻天覆地的变化&#xff0c;现代助听器除了助听功能&#xff0c;还具有看电视&#xff0c;听…

AD导入.step 3D封装

在网站查找想要的3D封装 https://www.3dcontentcentral.cn/ 下载 AD导入 在封装库下导入

融云上线 HarmonyOS NEXT 版 SDK,全面适配「纯血鸿蒙」生态

6 月 21 日&#xff0c;“2024 华为开发者大会”正式发布使用自研内核的原生鸿蒙系统 HarmonyOS NEXT&#xff0c;即 “纯血鸿蒙”。 同时&#xff0c;华为宣布开放“鸿蒙生态伙伴 SDK 市场”&#xff0c;甄选各类优质、安全的 SDK 加入聚合平台&#xff0c;助力各行业开发者轻…

数据结构初阶 堆的问题详解(三)

题目一 4.一棵完全二叉树的节点数位为531个&#xff0c;那么这棵树的高度为&#xff08; &#xff09; A 11 B 10 C 8 D 12 我们有最大的节点如下 假设最大高度为10 那么它的最多节点应该是有1023 假设最大高度为9 那么它的最多节点应该是 511 所以说这一题选B 题目二 …

08 docker Registry搭建docker私仓

目录 本地镜像发布流程 1. docker pull registry 下载镜像 2. docker run 运行私有库registry 3. docker commit 构建镜像 4. docker tag 修改新镜像&#xff0c;使之符合私服规范tag 5. 修改配置文件使之支持http 6. curl验证私服库上有什么镜像 7. push推送 pull拉取 …

Jenkins教程-13-参数化任务构建

上一小节我们学习了发送html邮件测试报告的方法&#xff0c;本小节我们讲解一下Jenkins参数化任务构建的方法。 很多时候我们需要根据不同的条件去执行构建&#xff0c;如自动化测试中执行test、stg、prod环境的构建&#xff0c;Jenkins是支持参数化构建的。 以下是Jenkins官…

kaggle量化赛金牌方案(第七名解决方案)(下)

— 无特征工程的神经网络模型&#xff08;得分 5.34X&#xff09; 比赛进入最后阶段&#xff0c;现在是时候深入了解一些关于神经网络模型的见解了。由于 Kaggle 讨论区的需求&#xff0c;我在这里分享两个神经网络模型。第一个是 LSTM 模型&#xff0c;第二个是卷积网络&…

pmp顺利通关总结

目录 一、背景二、总结三、过程 一、背景 人活着总是想去做一些事情&#xff0c;通过这些事情来证明自己还活着。 而我证明自己还会活着并且活得很好的方式和途径&#xff0c;是通过这些东西去让自己有一个明确的边界节点&#xff1b;借此知识来验证自己的学习能力。 我坚定认…

汇凯金业:投资交易如何才能不亏损

投资交易中永不亏损是一个理想化的目标&#xff0c;现实中无法完全避免亏损。然而&#xff0c;通过科学的方法、合理的策略和严格的风险管理&#xff0c;投资者可以大幅减少亏损&#xff0c;并提高长期盈利的概率。以下是一些关键策略和方法&#xff0c;帮助投资者在交易中尽量…

Android线性布局的概念与属性

线性布局(LinearLayout)是Android中最简单的布局方式&#xff0c;线性布局方式会使得所有在其内部的控件或子布局按一条水平或垂直的线排列。如图所示&#xff0c;图a是纵向线性布局示意图&#xff0c;图b是横向线性布局示意图。 a&#xff09;纵向线性布局示意图 …

2024年电子信息工程与电气国际学术会议 (EIEEE 2024)

2024年电子信息工程与电气国际学术会议 &#xff08;EIEEE 2024&#xff09; 2024 International Academic Conference on Electronic Information Engineering and Electrical Engineering 【重要信息】 大会地点&#xff1a;北京 大会官网&#xff1a;http://www.iceieee.co…

昂科烧录器支持MindMotion灵动微电子的32位微控制器MM32L052NT

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中MindMotion灵动微电子的32位微控制器MM32L052NT已经被昂科的通用烧录平台AP8000所支持。 MM32L052NT使用高性能的ARM Cortex-M0为内核的32位微控制器&#xff0c;最高工作频率…

语音唤醒入门(基于ESP-skainet)

主要参考资料&#xff1a; ESP-SR 用户指南: https://docs.espressif.com/projects/esp-sr/zh_CN/latest/esp32s3/index.html 目录 ESP提供的模型直接初始化和使用模型AFE声学前端算法 使用模型 自定义模型 ESP提供的模型 乐鑫提供了经过训练的 WakeNet 和 MultiNet 模型&…

【C++】多态(详解)

前言&#xff1a;今天学习的内容可能是近段时间最难的一个部分的内容了&#xff0c;C的多态&#xff0c;这部分内容博主认为难度比较大&#xff0c;各位一起慢慢啃下来。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质量&#xff23…

【深海王国】小学生都能玩的语音模块?ASRPRO打造你的第一个智能语音助手(4)

Hi~ (o^^o)♪, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~ 辛勤工作的你今天也辛苦啦(/≧ω) 今天大都督继续为大家带来系列——小学生都能玩的语音模块&#xff0c;帮你一周内快速学会语音模块的使用方式&#xff0c;打造一个可用于智能家居、物联网领域的语音助…

NPDP究竟值不值得去考?

一、NPDP是什么&#xff1f; NPDP其实就是产品经理国际资格认证&#xff08;New Product Development Professional&#xff09;&#xff0c;是美国产品开发管理协会发起的&#xff0c;集理论、方法和实践一体&#xff0c;在新产品开发方面有一个很全面的知识体系。是国际公认…

对秒杀的思考

一、秒杀的目的 特价商品&#xff0c;数量有限&#xff0c;先到先得&#xff0c;售完为止 二、优惠券的秒杀 和特价商品的秒杀是一样的&#xff0c;只不过秒杀的商品是优惠券 三、秒杀的需求 秒杀前&#xff1a;提前将秒杀商品&#xff0c;存放到Redis秒杀中&#xff1a;使…

The First Descendant第一后裔卡顿的处理措施

The First Descendant第一后裔中&#xff0c;玩家可以体验具有不同个性概念和战斗风格的多种角色。后续将为每个角色推出各种皮肤和个性要素&#xff0c;让玩家能够打造个人专属角色The First Descendant第一后裔的世界中&#xff0c;角色的个性化不仅仅局限于他们独特的战斗风…

后端之路(集合项目)——结合案例正式搭建项目

在前面学完java后端的Maven、spring boot、Mysql、Mybatis之后&#xff0c;我们现在就应该集合它们开始搭建一个项目试试手了 这里我还是跟着黑马程序员的步骤来走好每一步&#xff0c;也给各位讲清楚怎么弄 先看一下这个图&#xff0c;觉得太笼统不明白的话不着急&#xff0c…

主流国产服务器操作系统技术分析

主流国产服务器操作系统 信创 "信创"&#xff0c;即信息技术应用创新&#xff0c;作为科技自立自强的核心词汇&#xff0c;在我国信息化建设的进程中扮演着至关重要的角色。自2016年起步&#xff0c;2020年开始蓬勃兴起&#xff0c;信创的浪潮正席卷整个信息与通信技…