《数据库系统内 幕》事务恢复与处理

2023-10-26

专栏
《数据库系统内 幕》存储引擎
《数据库系统内 幕》事务恢复与处理
《数据库系统内 幕》日志结构存储
《数据库系统内 幕》B树的变体
《数据库系统内 幕》分布式系统

章五

第五章是本书中重要一章,有三节。是存储结构后的一些高级组件问题,包括缓冲区管理、锁管理和恢复。为了更方便的理解数据库事务。

缓冲区管理

页缓存

对于双层存储体系,磁盘的访问速度较慢,所以为了减少访问磁盘,页面被缓存在内存中。
当磁盘上的数据一直不被修改,就可以重用内存的缓存页,称为虚拟磁盘。但是当内存的副本满了,就会去访问磁盘,以上称为页缓存。
存储引擎请求页的时候,就是先看内存中有无缓存版本,有的话直接访问,没有的话去磁盘中,将逻辑地址和页号转换为物理地址,加载到内存,然后给存储引擎已缓存的版本。
脏页:页上的脏标志位表示内容与磁盘不同步,必须刷写至磁盘才能保证持久性。

回收

保持页缓存满的的状态较好。
持久性的维持:需要预写日志(WAL)和页缓存。因为若数据库崩溃则未刷写的数据会丢失,所以设置日志,只有刷写完成才丢弃日志记录。

预写日志、页缓存(缓存页刷写完成)-> 日志记录丢弃 -> 脏页换出缓存

锁定页

根据b树的数据结构,可以了解他是“矮胖”的形状,可以考虑到层次高的节点会在大多数读取中命中。同时在分裂合并操作中往往也会被命中。所以对于这些频率贼高的页可以进行“固定”。

页置换策略:同os中的置换策略。

FIFO:注意会产生belady异常。
LRU:最长时间未使用,如果每次维护一个队列,将页进行一个更换时,重新引用和链接节点代价较高。
CLOCK/CLOCK-sweep:(时钟页面置换算法)
LFU:最小频率算法。tinyLFU是基于频率的页置换策略,它不是选择换出的元素,选择的是要保留的元素形成一个保护队列,对于访问频率相对很高的元素在队列中进行长时间保留。采用了一个频率直方图来维护紧凑的缓存访问历史记录。
该策略里面有三个队列:
入场队列----考察队列----保护队列

在这里插入图片描述

恢复

通过预写日志这个仅追加的辅助磁盘数据结构,保证数据库系统有持久性语义。
WAL既保存单独的操作记录,又保存事务完成的记录。
系统在回滚或恢复期间为保证系统正常工作,会在撤销操作时记录补偿日志记录并将其存储在日志中。

检查点

检查点用来标记之前的日志记录已经不被需要了,减少了工作量。强制将所有脏页刷写到磁盘过程称为同步检查点。
因为全部刷写是不现实的,所以大多数数据库选择了模糊检查点。
日志头部用last——checkpoint指针记录最后一次成功的检查点信息。模糊检查点从begin-checkpoint记录开始到end-checkpoint结束。

steal和force策略(不太理解,要回看)

为了确定何时将内存的更改刷写到磁盘上,定义出来的策略。
steal策略是在事务提交之前允许刷写事务修改过的页。
no-sreal策略不允许将未提交的事务内容刷写到磁盘。
force策略要求在事务提交前将事务修改的所有页刷写到磁盘上。
no-force策略即使事务修改的页尚未刷写到磁盘上,也可以提交。
现在DBMS常用的是steal/no-force策略,因此一般都需要记录redo log和undo log。这样可以获得较快的运行时性能,代价就是在数据库恢复(recovery)的时候需要做很多的事情,增大了系统重启的时间。
数据库崩溃后重启时的恢复过程分为三个阶段:

分析阶段:识别页缓存中脏页和崩溃时进行的事务。
重做阶段:重放历史记录直到崩溃点。
撤销阶段:回滚所有未完成事务,还原到一致状态。防止再次崩溃,撤销事务操作也会记录到日志中。

并发控制

本章节研究的是本地的并发控制技术。
乐观并发控制:
允许多个事务并发的读取和写入,事务不会相互阻塞,而是保留记录,并在提交前检查这些历史记录是否冲突,如果产生冲突则终止某一个冲突事务。

多版本并发控制mvcc:
允许一条数据同时存在多个时间戳的版本,通过这种方式事务读到的是过去的某一时刻的一致的视图。后续的操作都是针对一个版本的数据进行的(这里的翻译非常混乱)。

悲观并发控制:
加锁的版本会要求维护数据库记录上的锁。不加锁的实现根据未完成事务调度,维护读写操作列表。

异常

并发执行事务期间会出现读异常和写异常:脏读、不可重复读、幻读;脏写、丢失更新、写偏斜。

脏读:读到未提交的数据,比如说前面的事务更新之后回滚,后面的事务就读到了未提交的数据。
不可重读:同一事务两次执行,读取到的数据不一致,t1读取一行,t2修改并提交,t1再次读取数据改变。
幻读:指的是两次范围读取获取的行集合不一样。

丢失更新:两个事务同时更新一个值,且都commit,则后提交的覆盖了前面提交的。
脏写:脏读情况下又修改。
写偏斜:单个事务满足一些约束,组合事务却违反了。

处理数据库死锁的几种方法:

1.引入超时机制并终止长时间运行的事务。

2.保守2PL(两阶段锁)。

数据库常使用等待图(waits-for graph实现)来检测或者避免死锁:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《数据库系统内 幕》事务恢复与处理 的相关文章

  • Python人工智能学习路线(长篇干货)

    本文篇幅较长 干货较多 建议收藏慢慢看 前言 谈到人工智能 AI 算法 常见不外乎有两方面信息 铺天盖地各种媒体提到的高薪就业 贩卖课程 知乎上热门的算法岗 水深火热 灰飞烟灭 的梗 贩卖焦虑 其实 这两方面都是存在的 但都很片面 这里不加
  • 【Blender】我的第一个3D模型--马克杯(附教程)

    渲染图 Blander导出gltf插件 https github com Kupoman blendergltf 图文教程 对着正方体按X 确定删除默认的正方体 按Shitft A 快捷键 创建一个圆环 按TAB 键 进入编辑模式 再按E
  • 盒子模型和box-sizing属性

    1 前言 今天被杭州有赞的前端面试官面了 很多问题一知半解 主要原因还是因为我这几个月大多数时间都在写项目 平常学习也是主要以框架为主 很多基础知识都遗忘了 从这篇文章开始 我会记录 学习和研究面试中遇到的问题 当然 一般都是关于前端开发的

随机推荐

  • 移动数据网络类型是nr_5G(NR)网络中小区接入控制

    无线接入控制是一种针对话务拥塞的处理机制 通过限制移动设备向基站的连接请求 保护和保证紧急呼叫等关键通信的成功接入 无线侧可控制接入的方法有两种 1 终端侧 接入控制方式 在向基站移动设备发送任何连接请求之前 终端 需读取广播消息 基站 识
  • 小程序全局悬浮窗_微信小程序悬浮窗弹出怎么实现?

    微信小程序悬浮窗弹出怎么实现 很多的微信小程序管理员会在微信小程序界面开发微信小程序悬浮窗弹出功能 接下来小编会为大家介绍微信小程序悬浮窗弹出关注实现的全部步骤哦 微信小程序悬浮窗弹出怎么实现 微信小程序悬浮窗弹出的效果如下 微信小程序悬浮
  • Android开发者必备工具-常见Android模拟器(MuMu、夜神、蓝叠、逍遥、雷电、Genymotion...)

    模拟器的用途介绍 作为一名Android开发者 模拟器是我们调试和测试应用必备的神器 模拟器主要有以下用途 第一个是用于游戏 游戏玩家可以在他们的电脑上使用模拟器来让一些游戏更容易玩 他们不必依赖设备的电池寿命 借助于键盘 鼠标以及更大的屏
  • unity下简易摇杆实现

    using System Collections using System Collections Generic using UnityEngine using UnityEngine UI using UnityEngine Event
  • 华为OD机试 - 战场索敌 - 深度优先搜索dfs算法(Java 2023 B卷 100分)

    目录 一 题目描述 二 输入描述 三 输出描述 四 深度优先搜索dfs 五 解题思路 六 Java算法源码 七 效果展示 1 输入 2 输出 3 说明 4 如果增加目标敌人数量K为5 5 来 上强度 华为OD机试 2023B卷题库疯狂收录中
  • 后台管理页面,jqGrid框架使用

    之前做后台管理页面是用的 jquery LayUI 样式什么的 分页表格啊 表单之类的全是LayUI搞定 不过现在觉得 LayUI还是有点混乱 然后最近在做一个新的后台管理页面 是用的 jquery jqGrid bootstrap fa
  • weblogic 任意文件上传漏洞复现(CVE-2018-2894)

    weblogic 任意文件上传漏洞复现 CVE 2018 2894 漏洞介绍 WebLogic管理端页面 ws utc begin do ws utc config do下可上传任意getshell 复现环境 vulhub的docker环境
  • 可以新建文本的管理器_「通达信」自定义数据管理器的制作方法

    自定义数据管理器制作的数据可以实现在板块中 K线主图上显示我们制作的数据 对于记性不好的股友起到很好的提醒作用 非常使用 譬如下图中在板块中显示你自定义的数据 调出路径 功能 公式系统 自定义数据管理器 如下图 打开 自定义数据管理器 面板
  • Java注解:Java注解的基本认识

    Java的注解从1 5就有了 算不上新特性 应该算是 老特性 基本业务代码写的时候也可以说是 最熟悉陌生人 我们最起码会经常用到spring的注解来开发 比如说我们定一个 service来作为我们处理逻辑 实现服务接口的 但是可能会对自己使
  • 9 万字 208 道 Java 经典面试题总结 (附答案), 看到就是赚到

    前言 最近有很多粉丝问我 有什么方法能够快速提升自己 通过阿里 腾讯 字节跳动 京东等互联网大厂的面试 我觉得短时间提升自己最快的手段就是背面试题 最近总结了Java常用的面试题 分享给大家 希望大家都能圆梦大厂 加油 下面篇幅较长 有需要
  • rosserial_arduino的安装及使用

    本文主要是使用rosserial arduino包 可以通过msp430launchpad for arduino IDE直接使用ROS 此ide和audrino ide 的使用方法大同小异 rosserial提供了一个通信协议 它通过ar
  • matlab pcacov排序,matlab中pcacov这个命令的作用???

    满意答案 5a3d010 2013 09 12 采纳率 43 等级 12 已帮助 16369人 pcacov Principal components analysis PCA using the covariance matrix Syn
  • JS中原型对象中的constructor的作用?

    最近被同事问道一个问题 function Father this color red green function Child this test 1 Child prototype new Father let instance new
  • Linux内核配置——menuconfig

    1 menuconfig介绍 menuconfig的作用是提供一个图像化的界面去配置内核 也就是修改 config文件 其实你直接去修改 config文件 不用menuconfig也是可以的 但是 config里的配置项太多了 靠人根本记不
  • Maven 设置仓库地址

    修改本地仓库地址 maven 用来管理我们的 Java 第三方库 我们需要设置仓库的本地地址来存放这此第三方库 打开 Maven 目录下的配置文件 apache maven 3 5 0 conf settings xml 找到 标签
  • 光纤信号衰减的原理及分析

    光纤信号衰减是指随着光信号在光纤中传输的距离增加 光信号的强度逐渐减弱的现象 光纤信号衰减的原理主要包括以下两个方面 1 光纤的损耗 光纤在传输过程中会出现一定程度的损耗 主要包括以下几种 1 吸收损耗 光信号在传输过程中会被光纤材料吸收
  • js的FileSaver.saveAs()方法:监听保存进度,进度条等方法

    在使用FileSaver saveAs保存表格到本地时 如果想要获取导出 保存进度可以如下操作 FileSaver js的saveAs 方法是一个异步操作 它将文件保存到用户设备上 在调用saveAs 方法后 可以通过使用回调函数 Prom
  • 【SSM】【4】前端后端数据流转

    前后端数据流转图 业务流转图 前端控制器接受用户请求响应 doJsonRequest ursuser login json json function data if getUrlParam session 1 history back e
  • 最新版 phpstudy V8.0如何禁止或允许站点目录列表显示

    phpstudy V8 0如何禁止或允许站点目录列表显示 localhost下显示文件目录 如何在浏览器中打开 最新版phpstudy V8 0 的文件目录 如果你像我一样是小白 这篇文章对你或许有用 1 当你删除了phpstudy pro
  • 《数据库系统内 幕》事务恢复与处理

    数据库系统内幕 章五 缓冲区管理 页缓存 回收 锁定页 页置换策略 同os中的置换策略 恢复 检查点 steal和force策略 不太理解 要回看 并发控制 异常 专栏 数据库系统内 幕 存储引擎 数据库系统内 幕 事务恢复与处理 数据库系