说说redo log 与 undo log

news2024/11/26 1:50:28

redo log

redo log叫做重做日志.用于解决数据库事物提交 还未刷入磁盘,服务器down机导致的数据丢失的问题。

InnoDB作为MySQL的存储引擎,数据存储在磁盘中,如果每次读写数据都要操作磁盘IO效率会很低,为此InnoDB提供了缓存(Buffer Pool),Buffer Pool中包含了磁盘中部分数据页的映射,作为访问数据库的缓冲:当从数据库读取数据时,会首先从Buffer Pool中读取,如果Buffer Pool中没有,则从磁盘读取后放入Buffer Pool;当向数据库写入数据时,会首先写入Buffer Pool,Buffer Pool中修改的数据会定期刷新到磁盘中(刷脏)

Buffer Pool的使用大大提高了读写数据的效率,但是也带了新的问题:如果MySQL宕机,而此时Buffer Pool中修改的数据还没有刷新到磁盘,就会导致数据的丢失,事务的持久性无法保证。

于是,redo log被引入来解决这个问题:当数据修改时,除了修改Buffer Pool中的数据,还会在redo log记录这次操作;当事务提交时,会调用fsync接口对redo log进行刷盘。如果MySQL宕机,重启时可以读取redo log中的数据,对数据库进行恢复。redo log采用的是WAL(Write-ahead logging,预写式日志),所有修改先写入日志,再更新到Buffer Pool,保证了数据不会因MySQL宕机而丢失,从而满足了持久性要求。

既然redo log也需要在事务提交时将日志写入磁盘,为什么它比直接将Buffer Pool中修改的数据写入磁盘(即刷脏)要快呢?主要有以下两方面的原因:

(1)刷脏是随机IO,因为每次修改的数据位置随机,但写redo log是追加操作,属于顺序IO。

(2)刷脏是以数据页(Page)为单位的,MySQL默认页大小是16KB,一个Page上一个小修改都要整页写入;而redo log中只包含真正需要写入的部分,无效IO大大减少。

undo log

undo log的2个主要作用是实现MVCC和事物回滚

当 delete 一条记录时,undo log 中会记录一条对应的 insert 记录,反之亦然,当 update 一条记录时,它记录一条对应相反的 update 记录,如果 update 的是主键,则是对先删除后插入的两个事件的反向逻辑操作的记录。

  在事物回滚时就会反向读取相应内容进行回滚,也可以根据undo log读取到被修改后数据的原值

喵呜面试助手:一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

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

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

相关文章

无涯教程-JavaScript - STDEVP函数

STDEVP函数替代Excel 2010中的STDEV.P函数。 描述 该函数根据作为参数给出的整个总体计算标准偏差。标准偏差是对值与平均值(平均值)的分散程度的度量。 语法 STDEVP (number1,[number2],...)争论 Argument描述Required/OptionalNumber1The first number argument corresp…

文件包含漏洞及漏洞复现

文件包含漏洞 1. 文件包含概述 程序开发人员通常会把可重复使用函数或语句写到单个文件中,形成“封装”。在使用某个功能的时候,直接调用此文件,无需再次编写,提高代码重用性,减少代码量。这种调用文件的过程通常称为…

机器学习与数据分析

【数据清洗】 异常检测 孤立森林(Isolation Forest)从原理到实践 效果评估:F-score 【1】 保护隐私的时间序列异常检测架构 概率后缀树 PST – (异常检测) 【1】 UEBA架构设计之路5: 概率后缀树模型 【…

单独创建一个线程并执行

C并发编程入门 目录 STL 写法 #include <thread> #include <iostream> using namespace std;void thread_fun(void) {cout << "one STL thread!" << endl; }int main(void) {std::thread thread1(thread_fun);thread1.join();return 0; }其…

数字IC验证——PSS可移植测试用例

PSS是Accellera组织定义的测试用例生成规范&#xff0c;其思想是定义一个抽象模型&#xff0c;EDA工具可以从中生成适用于每个设计层次结构和每个验证平台的测试&#xff0c;即PSS定义了统一的测试场景&#xff0c;而场景的使用可以横跨不同验证层次和配置。 这种特性决定了PSS…

docker笔记8:Docker网络

1.是什么 1.1 docker不启动&#xff0c;默认网络情况 ens33 lo virbr0 在CentOS7的安装过程中如果有选择相关虚拟化的的服务安装系统后&#xff0c;启动网卡时会发现有一个以网桥连接的私网地址的virbr0网卡(virbr0网卡&#xff1a;它还有一个固定的默认IP地址192.168.122…

快速掌握STM32工程创建

STM32 工程创建-- 使用Keil uVision5 软件 晓理紫 1 准备库函数库 STM32F10x_StdPeriph_Lib_V3.5.0 VX 搜索“晓丽紫”关注回复STM32F10x即可下载 2、创建一个目录用来存放工程 STM32Study STM32Study/study1 存放本次工程目录 3、打开Keil uVision5 创建工程 4、选择型号(根据…

租服务器训练深度学习模型

一、选择租哪个 推荐用AutoDL(便宜、功能强大、gug少、有时时客服解决问题) AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL 二、注册、登录 学生可以认证&#xff0c;享受会员价 服务器需要登录后先充值&#xff0c;先充个10元&#xff0c;接下来试试看。每次都是开机…

Web framework-Gin(二)

一、Gin 1、Ajax AJAX 即“Asynchronous Javascript And XML”&#xff08;异步 JavaScript和 XML&#xff09;&#xff0c;是指一种创建交互式、快速动态网页应用的网页开发技术&#xff0c;无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。通过在后台与服…

AppleID切换验证手机

第一步&#xff1a;登录个人信息页面 https://appleid.apple.com/account/manage/section/security 第二步&#xff1a;选择账户安全 第三步&#xff1a;验证新手机号即可

供应链 | 顶会CIKM论文精读:面向大规模三维装箱问题的数据驱动树形搜索算法

论文解读&#xff1a;丁建辉&#xff0c;李明哲&#xff0c;赵艳蓉&#xff0c;孙楚天 编者按 本次解读的文章发表于CCF-B类会议30th ACM International Conference on Information and Knowledge Management。摘要总结如下&#xff1a; 3维装箱问题&#xff08;3D-BPP&#…

2023第二届陇剑杯网络安全大赛 预选赛Writeup

题目附件 链接&#xff1a;https://pan.baidu.com/s/1J20VusdMjit4coWAi5lnnQ 提取码&#xff1a;6emq 文章目录 HWhard_web_1hard_web_2hard_web_3 SSsevrer save_1sevrer save_2sevrer save_3sevrer save_4sevrer save_5sevrer save_6sevrer save_7sevrer save_8 WSWireshar…

46、TCP的“三次握手”

在上一节中&#xff0c;TCP首部常用的几个选项&#xff0c;有些选项的参数就是在通信双方在建立TCP连接的时候进行确定和协商的。所以在学习过TCP报文首部之后&#xff0c;下面我们开始学习TCP的连接建立。 TCP的一个特点是提供可靠的传输机制&#xff0c;还有一个特点就是TCP…

字符型注入([SWPUCTF 2021 新生赛]easy_sql)

拿到题目&#xff0c;查看源码&#xff0c;可知是要输入参数wllm。 输入参数/?wllm1&#xff0c;得到会显 继续输入参数/?wllm1&#xff0c;报错&#xff0c;确定为字符型漏洞 1.查看字段列表&#xff0c;发现在字段4报错&#xff0c;确定为3列 ?wllm-1 order by 3-- ?wl…

基于JavaScript粒子流动效果

这是一个HTML文件&#xff0c;主要包含了一些CSS样式和JavaScript代码&#xff0c;用于创建一个动画效果。 在CSS部分&#xff0c;定义了一些基本的样式&#xff0c;包括页面的背景颜色、位置、大小等。特别的&#xff0c;定义了两种球形元素&#xff08;.ball_A 和 .ball_B&am…

静态路由配置实验:构建多路由器网络拓扑实现不同业务网段互通

文章目录 一、实验背景与目的二、实验拓扑三、实验需求四、实验解法1. 配置 IP 地址2. 按照需求配置静态路由&#xff0c;实现连接 PC 的业务网段互通 摘要&#xff1a; 本实验旨在通过配置网络设备的IP地址和静态路由&#xff0c;实现不同业务网段之间的互通。通过构建一组具有…

nginx-基于range做断点续传

nginx默认开启了range断点续传&#xff0c;只要再请求时载请求头上添加header&#xff0c;range&#xff0c;nginx就可以根据range范围返回相应的字节。

zabbix配置钉钉告警

钉钉告警python脚本 cat python20 #!/usr/bin/python3 #coding:utf-8 import requests,json,sys,os,datetime # 机器人的Webhook地址 webhook"钉钉" usersys.argv[1] textsys.argv[3] data{"msgtype": "text","text": {"conten…

Leetcode 2431.最小偶倍数

给你一个正整数 n &#xff0c;返回 2 和 n 的最小公倍数&#xff08;正整数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;n 5 输出&#xff1a;10 解释&#xff1a;5 和 2 的最小公倍数是 10 。示例 2&#xff1a; 输入&#xff1a;n 6 输出&#xff1a;6 解释&#…

docker 笔记10:Docker轻量级可视化工具Portainer

1. 是什么 Portainer 是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 2.安装 https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux 步骤 docker命令安装 docker run -d …