首页 > 其他分享 >Lecture#20 Database Crash Recovery

Lecture#20 Database Crash Recovery

时间:2023-04-20 09:02:24浏览次数:30  
标签:事务 Crash 记录 LSN DBMS 20 Lecture 日志 page

上节课介绍到,故障恢复算法由两个部分构成:

  • 在事务执行过程中采取的行动来确保出现故障时能够恢复 (上节课)
  • 在故障发生后的恢复机制,确保原子性、一致性和持久性 (本节课)

1 ARIES

本节课介绍的是 Algorithms for Recovery and Isolation Exploiting Semantics (ARIES),由 IBM Research 在 90 年代初为 DB2 DBMS 研发的基于 WAL 的故障恢复机制,尽管并非所有 DBMS 都严格按照 ARIES paper 实现故障恢复机制,但它们的思路基本一致。

ARIES 的核心思想可以总结为 3 点:

  • Write-Ahead Logging (WAL)
    • 在数据落盘之前,所有写操作都必须记录在日志中并落盘
    • 必须使用 Steal + No-Force 缓存管理策略 (buffer pool policies)
  • Repeating History During Redo
    • 当 DBMS 重启时,按照日志记录的内容重做数据,恢复到故障发生前的状态
  • Logging Changes During Undo
    • 在 undo 过程中记录 undo 操作到日志中,确保在恢复期间再次出现故障时不会执行多次相同的 undo 操作

本节大纲:

  • Log Sequence Numbers
  • Normal Commit & Abort Operations
  • Fuzzy Checkpointing
  • Recovery Algorithm

2 Log Sequence Numbers

WAL 中的每条日志记录都需要包含一个全局唯一的 log sequence number (LSN),一般 LSN 单调递增。

DBMS 中的不同部分都需要记录相关的 LSN 信息,举例如下:

Name Where Definition
flushedLSN memory 最后落盘的那个 LSN
pageLSN buffer pool page 与某 page data 相关的最新 LSN
recLSN buffer pool page 在上次落盘之后,与某 page data 相关的最老 LSN
lastLSN transaction 某事务最后一条日志的 LSN
MasterRecord disk 最近一次 checkpoint 的 LSN

pageLSN 和 recLSN 对应一个 page 尚未落盘的最新 log 和最老 log。

在 buffer pool manager 中,每个 data page 都维护着 pageLSN,而 DBMS 本身需要追踪 flushedLSN。

事务修改某 page 中的数据时,要更新该 page 的 pageLSN,在将操作日志写进 WAL 后,DBMS 会更新 flushedLSN 为最新落盘的 log record 的 LSN。

在 page x 落盘前,DBMS 必须保证以下条件成立,表明该 page 的对应的 log 已落盘:

\[pageLSN_x ≤ flushedLSN \]

image-20230420073013850

3 Normal Commit & Abort Operations

每个事务都会包含一些列的读和写操作,然后提交 (commit) 或中止 (abort),本节我们来看下不存在故障时,事务的正常执行过程。

在讨论之前,我们需要约定 4 个假设,简化问题:

  • 所有日志记录都能放进一个 page 中
  • 写一个 page 到磁盘能保持原子性
  • 没有 MVCC,使用严格的 2PL
  • 使用 WAL 记录操作日志,buffer pool policy 为 Steal + No-Force

3.1 Transaction Commit

当事务提交时,DBMS 先写入一条 COMMIT 记录到 WAL ,然后将 COMMIT 及之前的日志落盘,当落盘完成后,flushedLSN 被修改为 COMMIT 记录的 LSN,同时 DBMS 将内存中 COMMIT 及其之前的日志清除。最后等事务涉及的脏数据页也落盘后,再写入一条 TXN-END 记录到 WAL 中,作为内部记录,对于执行提交的事务来说,COMMIT 与 TXN-END 之间没有别的操作。

image-20230420073847156

3.2 Transaction Abort

要处理事务回滚,就必须从 WAL 中找出所有与该事务相关的日志及其执行顺序。由于在 DBMS 中执行的所有事务的操作记录都会写到 WAL 中,因此为了提高效率,同一个事务的每条日志中需要记录上一条记录的 LSN,即 prevLSN,一个特殊情况是:第一条 BEGIN 记录的 prevLSN 为空。

实际上中止事务是 ARIES undo 操作的一种特殊情况:回滚单个事务。

image-20230420074323435

可以看到,T4 的每条日志都记录着 prevLSN,当 T4 要中止时,DBMS 先向 WAL 中写入一条 ABORT 记录,然后寻着 LSN 与 prevLSN 连接串成的链表,找到之前的操作,倒序回滚恢复旧值,为了防止在回滚过程中再次故障导致部分操作被执行多次,回滚操作也需要写入日志中,等待所有操作回滚完毕后,DBMS 再往 WAL 中写入 TXN-END 记录,意味着所有与这个事务有关的日志都已经写完,不会再出现相关信息。

那么,如何记录回滚操作呢?这就是我们马上要介绍的 CLR。

3.3 Compensation Log Records

CLR 描述了为 undo 先前更新记录的操作而采取的操作,它记录了原操作 log record 的所有字段 和 undoNext 指针 (指向下一个将要被 undo 的 LSN),CLR 本身也是操作记录,因此它也需要像其它操作一样写进 WAL 中,但DBMS在通知 application 事务中止前,不会强制将它们落盘。

标签:事务,Crash,记录,LSN,DBMS,20,Lecture,日志,page
From: https://www.cnblogs.com/angelia-wang/p/17335375.html

相关文章

  • [PA2021] Od deski do deski (dp)
    计数数列个数,要满足能划分为若干个两端相等区间。首先容易想到DP。我想的是按段分阶段转移,显然不行,因为很容易算重,一个数列能有多种划分方案则会被算多次。因此直接计数数列的每位,\(g(i,j)\)表示前\(i\)位有\(j\)种值存在位置的前一位往前的数列为合法序列的合法序列方案数,\(f(......
  • 20201302姬正坤《网络对抗技术》Exp5 信息搜集与漏洞扫描
    《网络对抗技术》Exp5信息搜集与漏洞扫描实践目标(1)各种搜索技巧的应用(2)DNSIP注册信息的查询(3)基本的扫描技术:主机发现、端口扫描、OS及服务版本探测、具体服务的查点(以自己主机为目标)(4)漏洞扫描:会扫,会看报告,会查漏洞说明,会修补漏洞(以自己主机为目标)实践步骤一、各种搜索技......
  • 2023/4/19
    7-2抽象基类Shape派生3个类分数 15全屏浏览题目切换布局作者 沙金单位 石家庄铁道大学声明抽象基类Shape,由它派生出三个类,圆形Circle,矩形Rectangle,三角形Triangle,用一个函数输出三个面积。输入格式:在一行中依次输入5个数,圆的半径,长方形的高......
  • 2023.4.19
    1//1.7最佳存款方案2//假设银行一年整存零取的月息为0.63%。现在某人手中有一笔钱,他打算在今后的3//五年中的每年年底取出1000元,到第五年时正好取完,请算出他存钱时应存入多少4#include<iostream>5usingnamespacestd;6intmain()7{8floatm,n;9......
  • 一招解决由于找不到msvcp120.dll,无法继续执行代码的方法
    msvcp120.dll是vs2010编译的程序默认的库文件。msvcp120.dll可以解决电脑软件或某些大型游戏、程序由于vs2010编译系统中缺失此dll的问题。vs2010编写的程序运行所需dll。下载msvcp120.dll文件打开电脑随便一个浏览器顶部网页输入 【 dll修复程序.site 】进入后点击开始下载dl......
  • java学习日记20230415-LinkedHashSet源码
    LinkedHashSet全面说明:LinkedHashSet是HashSet子类;底层是一个LinkedHashMap,底层维护了一个数组和双向链表根据元素的hashCode值来决定元素的位置,同时使用链表维护元素的次序,使得元素看起来是以插入的顺序保存的不允许添加重复元素维护了一个hash表和双向链表,每个节点有pre和......
  • 每日总结2023-04-19
    今天完成了对Android的界面优化,增添了昨日收入查看,总收入查看,并对三项收入增添了密文显示, 完成了下部分额外部分显示、跳转补货界面的Spinner使用   目前地址的当前详细位置还未完成,期望明天完成。 ......
  • 2020CVPR_Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement
    1.motivation收到图像编辑软件的启发2. Contribution(1)无监督(2)设计图像高阶曲线适应适合像素级映射,通过迭代自身(3)设计了四个无参考损失函数3.Network 3.1DCE-NetDCE-Net:是由6个Conv2D(3x3)+relu,分别输出为x1,x2, x3,x4,x5,x6,最后的卷积由Conv2d(3x3)+tan激......
  • 西南民族大学 2023 天梯自主训练 3
    西南民族大学2023天梯自主训练3正整数A+B#include<bits/stdc++.h>usingnamespacestd;typedefpair<int,int>PII;constintN=1e3+5,INF=0x3f3f3f3f,Mod=1e6;constdoubleeps=1e-8;typedeflonglongll;stringa,b;intx,y;intmain(){ios::sync_with_st......
  • 2023.4.19每日会议
    今天完成了什么:将图片识别的结果录入到数据库遇到了什么困难:将图片识别的结果录入到数据库后,我们有一个需要用户确认录入的信息是否正确的功能,如果不正确则让用户实现更改,但在更改时不断的报错以及数据库响应数为0,折腾一晚上也没有得到结果,打算明天解决明天打算做什么:解决今天遇......