十七、InnoDB 一次更新事务的执行过程

一、InnoDB的一次更新事务是怎么实现的?

InnoDB的一次更新事务涉及到多个组件和步骤,包括Buffer Pool、BinLog、UndoLog、RedoLog以及物理磁盘。

下面是一次完整的事务更新操作过程:

1. 加载数据到缓存中(Buffer Pool)

        在进行数据更新时,InnoDB首先在缓冲池(Buffer Pool)中查找待更新记录是否已经在内存中。若记录不在内存中,InnoDB会将记录从磁盘文件读取到缓冲池(Buffer Pool)中。

        缓冲池是InnoDB存储引擎提供的临时存储区,用于提升数据读取和修改的速度。将数据加载到缓冲池后,后续的更新操作均在缓冲池内进行。这样可以减少磁盘I/O操作,从而提高事务处理速度。缓冲池在内存中存储数据,可以降低磁盘I/O的开销,提高数据读取和写入的速度,从而优化事务处理性能。

2. 写入Undo Log

        在更新数据之前,InnoDB会将原始数据的副本写入Undo Log(回滚日志)。

        Undo Log是保证事务回滚和并发控制的关键部分,也是确保事务原子性和一致性的重要机制。Undo Log记录了事务开始前的数据状态,以便在需要回滚时进行数据恢复。通过记录撤销日志,InnoDB能够实现事务的滚动回滚,提高事务处理的灵活性。撤销日志在事务处理过程中起到了关键作用,它记录了事务的修改过程,使得事务能够在需要时回滚到之前的状态,保证数据的一致性和完整性。

3. 更新内存数据

        接下来,InnoDB会在缓冲池中更新数据。

        这意味着,当执行update语句时,InnoDB会先更新已经读取到Buffer Pool中的数据,修改操作会直接在内存中进行,而不是立即写入磁盘。

        此时,缓冲池中的数据被标记为"脏页",表示与磁盘上的数据不一致。脏页是缓冲池中已经被修改但尚未写入磁盘的数据页,它需要后续的处理才能将修改同步到磁盘,保证数据的持久性。

4. 写入Redo Log

        为了保证事务的持久性,InnoDB在Buffer Pool中记录修改操作的同时,InnoDB会先将更新操作写入Redo Log(重做日志)。

        Redo Log是一种物理日志,它记录了事务对数据库的修改操作。通过Redo Log,即使系统发生故障,也可以通过重做日志来恢复事务修改后的状态。这一机制保证了事务的可靠性,降低了系统故障带来的风险。重做日志是保证数据持久性和恢复性的关键,它记录了事务的修改过程,使得事务的修改能够在故障恢复后得到恢复。

5. 提交事务

        当事务完成所有的更新操作后,事务被提交。在提交事务时,InnoDB会将事务标记为"准备提交"状态。

        此时,事务的修改操作仍然在缓冲池中,尚未写入磁盘。事务提交是事务处理的重要环节,它标志着事务处理完毕,可以进行后续的提交操作。在提交之前,事务的修改操作需要得到处理,保证数据的完整性和一致性。

6. 写入BinLog

        在事务提交之后,InnoDB会将事务的修改操作写入BinLog(归档日志)。

        BinLog是MySQL的二进制日志,用于记录数据库的所有修改操作。在归档日志中记录的信息包括:事务开始的时间、数据库名、表名、事务ID、SQL语句等。它可以用于数据恢复、主从复制、数据分析和同步等场景。归档日志在数据库中起到了关键作用,它记录了数据库的修改过程,使得数据库的修改能够在故障恢复后得到恢复。

7. 刷新脏页到磁盘

        最后,在提交过程完成后,InnoDB会将缓冲池(Buffer Pool)中的脏页刷新到物理磁盘上的数据文件中。

        这个过程称为"刷脏"。通过刷脏操作,将缓冲池中的修改操作同步到磁盘,确保数据的持久性。

        然而,这个写入过程并非立即执行,而是由后台线程异步执行的,因此可能会有一定的延迟。总而言之,MySQL会在适当的时机选择将数据写入磁盘以进行持久化。

 

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

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

相关文章

Huggingface模型下载

1. 基础信息 huggingface的模型排行榜(需要翻墙):https://huggingface.co/spaces/mteb/leaderboard 2. 下载模型 2.1 手动一个个下载(方式1) 2. 使用huggingface-cli下载(方式2) pip install -U huggingface_hub h…

英文网站怎么推广,英文网站推广排名方案

英文网站的推广对于吸引国际用户、提升品牌知名度和增加业务收入至关重要。而在全球范围内,谷歌是最主要的搜索引擎之一,因此谷歌SEO排名优化是英文网站推广的重要手段之一。本文将介绍英文网站推广的方法,并重点探讨谷歌SEO排名优化推广策略…

STM32嵌套中断向量控制器NVIC

一、嵌套终端向量控制器NVIC 1.1NVIC介绍 NVIC(Nest Vector Interrupt Controller),嵌套中断向量控制器,作用是管理中断嵌套 先级。 核心任务是管理中断优 管理中断嵌套:我们在处理某个中断的过程中还没处理完这个中…

Python环境下基于慢特征分析SFA的过程监控(TE数据)

近几年来,慢特征分析,作为一种新兴的非监督型特征提取算法,正在逐渐兴起。它以变量随时间的一阶导数的大小来衡量变量变化的快慢,并从建模数据中提取出变化最慢的潜在特征变量,称为“不变量”或“慢特征”。 因为工业…

在新能源充电桩、智能充电枪、储能等产品领域得到广泛应用的两款微功耗轨至轨运算放大器芯片——D8541和D8542

D8541和D8542是我们推荐的两款微功耗轨至轨运算放大器芯片,其中D8541为单运放, D8542为双运放,它特别适用于NTC温度采集电路、ADC基准电压电路、有源滤波器、电压跟随器、信号放大器等电路应用,在新能源充电桩、智能充电枪、…

显示器亮度调节,如何调屏幕亮度

我们常说的显示器亮度,其实就是屏幕亮度。在使用电脑的时候呢,屏幕亮度直接可以影响我们的视觉感官,太亮度或者过暗都会伤害视力,而且眼睛看着也不舒服。那么电脑如何调屏幕亮度呢?操作方法很简单。接下来小编为大家介绍&#xf…

2024测试员最佳跳槽频率是多少?进来看看你是不是符合!

最近笔者刷到一则消息,一位测试员在某乎上分享,从月薪5K到如今的20K,他总共跳了10次槽,其中还经历过两次劳动申诉,拿到了大几万的赔偿,被同事们称为“职场碰瓷人”。 虽说这种依靠跳槽式的挣钱法相当奇葩&…

预训练大模型最佳Llama开源社区中文版Llama2

Llama中文社区率先完成了国内首个真正意义上的中文版Llama2-13B大模型,从模型底层实现了Llama2中文能力的大幅优化和提升。毋庸置疑,中文版Llama2一经发布将开启国内大模型新时代。 作为AI领域最强大的开源大模型,Llama2基于2万亿token数据预…

ObjectiveC-04-类的创建以属性、方法定义详细

在本小节中,笔者会详细讲解下ObjC的类的相关内容,包括创建、构造、方法、属性以及属性读取等相关知识,先来看下类的组成: 类的创建 ObjC是在C语言基础上扩展的,在编写OS软件时可以混用两种语言。但它们之间是有区别的…

全球X射线源市场持续增长 我国高端产品研制能力较弱

全球X射线源市场持续增长 我国高端产品研制能力较弱 X射线源,即X射线发生器,是产生和发射X射线的装置,从阴极发射电子,经阴极与阳极之间的电场加速后,高速轰击阳极靶面,产生X射线射出,是X射线检…

LeetCode.2908. 元素和最小的山形三元组 I

题目 2908. 元素和最小的山形三元组 I 分析 首先,看到这道题,第一反应就是暴力方法,三层for循环,枚举每一种情况,代码如下 class Solution {public int minimumSum(int[] nums) {int min Integer.MAX_VALUE;for(i…

Linux 进程信号:内核中信号结构、阻塞信号、捕捉信号

目录 一、阻塞信号 1、信号的状态 2、内核中的信号 信号集(Signal Set) task_struct 结构体 信号处理函数(Handler) 信号传递与调度 3、“signal_struct结构体”与“信号集sigset_t” 4、信号集操作函数 5、信号屏蔽字si…

【Hadoop大数据技术】——Hive数据仓库(学习笔记)

📖 前言: Hive起源于Facebook,Facebook公司有着大量的日志数据,而Hadoop是实现了MapReduce模式开源的分布式并行计算的框架,可轻松处理大规模数据。然而MapReduce程序对熟悉Java语言的工程师来说容易开发,但…

还在问要不要学Python?看完这篇你就知道了

前不久教育界的一个消息,引发了广泛的关注。 今年9月开学后,浙江三到九年级信息技术课将替换新教材,八年级将新增Python课程内容。新高一信息技术编程语言由VB替换为Python,大数据、人工智能、程序设计与算法按照教材规划五六年级…

抽象类和接口(java初识)

1.抽象类 1.1抽象类的概念 在面向对象中,所有对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息描绘一个具体的对象,这样的类就是抽象类。 例子: 说明…

【C语言终章】预处理详解(上)

【C语言终章】预处理详解(上) 当你看到了这里时,首先要恭喜你!因为这里就是C语言的最后一站了,你的编程大能旅途也将从此站开始,为坚持不懈的你鼓个掌吧! 🥕个人主页:开敲…

代码随想录算法训练营三刷 day38 | 动态规划之 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

三刷day38 509. 斐波那契数1 确定dp数组以及下标的含义2 确定递推公式3 dp数组如何初始化4 确定遍历顺序5 举例推导dp数组 70. 爬楼梯1 确定dp数组以及下标的含义2 确定递推公式3 dp数组如何初始化4 确定遍历顺序5 举例推导dp数组 746. 使用最小花费爬楼梯1 确定dp数组以及下标…

经验分享:开源知识库才是企业低成本搭建的最佳选择!

身为企业所有者的你,是否为建设企业的知识库而头疼?想要一个功能全面而又简单易用的知识库,但又担心成本过高?那我今天要分享的内容,可能会给你带来一些启示。那便是:开源知识库便是你企业低成本搭建的最佳…

Stable Diffusion 模型下载:epiCPhotoGasm(真实、照片)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 该模型对照片是什么有很高的了解,所以…

Arcgis获取乡镇矢量

现有全中国乡镇矢量边界(2023年),如何获取其中的自己所需的子区域(一个小镇)呢? 可以先去查一下自己的镇代码,我查的是东马圈镇代码 打开分析工具-提取分析-筛选 刚刚记下了FID 验证一下&am…