MySQL 进阶 图文详解InnoDB储存引擎

news/2024/5/20 12:31:43/文章来源:https://blog.csdn.net/weixin_44994494/article/details/128017096

前言

SQL 语句的最终执行者是存储引擎。存储引擎在经解析器、优化器处理后被执行器调用其接口执行优化后的执行计划。MySQL 存储引擎包括 InnoDB、Myisam、Memory、Archive、CSV 存储引擎等,其中最常用也是MySQL 默认的存储引擎是 InnoDB。
写入缓冲池(Buffer pool)

InnoDB 中有一个非常重要的组件——缓冲池(Buffer pool),缓冲池中存储了 MySQL 在磁盘文件上的数据缓存。所以当 InnoDB 执行更新语句时,会首先判断数据是否在缓冲池,如果不在,那么会从磁盘中加载到缓冲池,然后对更新的记录加独占锁,再执行更新。
在这里插入图片描述

写入undo 日志文件

更新数据会有更新失败的可能,那如果更新失败需要回滚怎么办?此时就需要在更新之前把需要更新的记录写入 undo 日志文件,在提交日志之前都是可以回滚的。
在这里插入图片描述

更新数据

在把数据写入缓冲池、原来的数据写入 undo 之后,就可以正式更新数据了。这时首先更新的是加入缓冲池的缓存数据,更新之后原来的 “name=zhangsan” 就变成了 “name=lisi” ,缓存中的数据就是脏数据了,因为此时磁盘上还是 “name=zhangsan” ,但是内存中的数据已经修改了。
  在这里插入图片描述

写入redo log buffer

经过以上步骤,内存中的缓存数据已经修改了,如果此时数据库宕机了,那刚才修改的岂不是毫无意义了?所以这个时候就需要把对缓存做的修改写入到 redo log buffer 中,这个缓冲区是用于存放 redo 日志的,就是记录对数据的修改操作。所以当数据库宕机时,就可以通过 redo 日志来恢复对数据的操作。那如果事务提交之前,数据库宕机了呢?内存中的数据会全部丢失,但是磁盘上的数据并没有修改,而且事务并没有提交成功,所以并没有影响。
在这里插入图片描述

在提交事务时,会根据策略把 redo 日志写入磁盘文件,这个策略通过 innodb_flush_log_at_trx_commit 来配置。
策略一:参数值为 0 时,不会把 redo 日志写入磁盘,如果事务提交成功后宕机了,那么内存中的数据和 redo 日志都会丢失,这种方式性能最高,但是对事务而言不安全;
策略二:参数值为 1 时,事务成功时,必须把 redo 日志写入磁盘,只要事务成功,redo 日志必然在磁盘中,这种方式是最安全的事务,但是会损耗性能;
策略三:参数为 2 时,把 redo 日志写入 os cache 系统内存中,而不是直接写入磁盘,在一定时间后才会由系统刷入磁盘,这种方式也有风险,写入系统内存后宕机依然会丢失数据,事务却提交成功了,但是性能相比策略二低,安全性相比策略一高,算是一种折中方式吧。
  一般建议 redo 日志刷盘策略选策略二,事务一旦提交成功,数据绝不能丢失。
  在这里插入图片描述

写入binlog

实际上MySQL 在提交事务成功时,不仅会 redo 刷盘还会写入 binlog 日志。redo 是 InnoDB 存储引擎所特有的,binlog 属于 MySQL Server 的日志文件。binlog 是一种归档日志,记录的是偏向逻辑性的日志,类似于“对user表中的id=10这行数据做了更新操作,更新后的值是lisi”;而 redo 是一种偏向物理性值的重做日志,类似于“对哪个数据页中的什么记录,做了什么修改”。步骤1、2、3、4属于事务开始提交,5、6属于事务提交。
在这里插入图片描述

binlog 也有不同的刷盘策略,使用参数 sync_binlog 控制 binlog 的刷盘策略。策略一:参数值为 0,此时会先写入 os cache,然后等待 os cache 刷盘,所以这种策略也是有安全风险的,可能会丢失 binlog 日志;策略二:参数值为 1,此时会在提交事务时,强制写入磁盘。
  在这里插入图片描述

提交事务

binlog 写入磁盘后,紧接着会完成最终的事务提交,此时会把本次更新对应的 binlog 文件名称和在 binlog 文件中的位置都写入 redo log 日志文件中,同时在 redo log 日志文件写入 commit 标记。完成后就算完成了事务的提交。
在这里插入图片描述

写入 commit 标记是用来保持 redo log 和 binlog 日志保持一致,即写入 commit 标记,表示 redo log 和 binlog 日志文件中都存在本次更新的日志了。

刷盘

MySQL 后台会有一个线程在合适的时机把修改的缓存刷回磁盘。

在这里插入图片描述

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

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

相关文章

用DIV+CSS技术设计的水果介绍网站(web前端网页制作课作业)

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

软件测试面试技巧有哪些?可以从这2个方面去进行准备

面试所有只职场人,通往工作岗位的第一道关卡,也是最重要的一道门槛。而面试中,如何回答HR提出的问题很大程度上决定了面试能不能成功。所以这些软件测试的面试技巧你可不能错过了。 首先是自我介绍 自我介绍的时间不能太短,几十秒…

(附源码)计算机毕业设计JavaJava毕设项目财务管理系统的设计与实现

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

【Flutter】shape 属性 ShapeBorder,形状

文章目录前言一、shape 是什么?二、不同的形状1.BeveledRectangleBorder2.Border3.CircleBorder圆形4.ContinuousRectangleBorder连续圆角5.StadiumBorder 体育场边界 ,药丸形状6.OutlineInputBorder外边框可以定制圆角7.UnderlineInputBorder下划线总结…

Springboot Security 前后端分离模式自由接口最小工作模型

但凡讲解Springboot Security的教程,都是根据其本身的定义,前后端整合在一起,登录采用form或者basic。我们现在的很多项目,前后端分离,form登录已经不适用了。很多程序的架构要求所有的接口都采用application/json方式…

复制集群架构设计技巧

Redis Sentinel设计技巧 Redis Sentinel基本架构 Monitoring Sentinel可以监控Redis节点的状态 Notification Sentinel可以通过API进行集群状态通知 Automatic failover Sentinel实现故障自动切换 Configuration provider Sentinel为client提供发现master节点的发现功能…

Java项目:JSP校园运动会管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目包含三种角色:运动员、裁判员、管理员; 运动员角色包含以下功能: 运动员登录,个人信息修改,运动成绩…

【优化求解】粒子群算法求解干扰受限无人机辅助网络优化问题【含Matlab源码 230期】

⛄一、粒子群简介 1 粒子群优化算法 粒子群优化算法( PSO)是指通过模拟鸟群觅食的协作行为,实现群体最优化。PSO是一种并行计算的智能算法,其基本模型如下: 假设群体规模为M,在D维空间中,群体中的第i个个体表示为XD ( xm1,xm2…xm D)T,速度表示为VD ( vm1,vm2…vm D)T,位置( …

一个简单的音乐网站设计与实现(HTML+CSS)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 音乐网页设计 | 仿网易云音乐 | 各大音乐官网网页 | 明星音乐演唱会主题 | 爵士乐音乐 | 民族音乐 | 等网站的设计与制作 | HTML期末大学生网页设计作…

【生成模型】Diffusion Models:概率扩散模型

---前言一、Diffusion Model 基本介绍二、生成模型对比三、直观理解Diffusion model四、形式化解析Diffusion model五、详解 Diffusion Model(数学推导)1.前向过程(扩散过程)2.逆扩散过程3.逆扩散条件概率推导4.训练损失六、训练、测试伪代码1. 训练2.测…

大一学生WEB前端静态网页——旅游网页设计与实现-张家口 6页

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 游景点介绍 | 旅游风景区 | 家乡介绍 | 等网站的设计与制作| HTML期末大学生网页设计作业 HTML:结构 CSS:样式 在操作方面上运…

string类(一)

目录 一、 string类对象的常见构造 二、string类对象的容量操作 2.1 size(返回字符串有效字符长度) 2.2 capacity(返回空间总大小) 2.3 reserve扩空间​编辑 2.4 resize初始化不会覆盖本来的空间​编辑 2.5 对于test_string7中每一句代码进行调试运行 三、string类对象的…

如何给PDF解密?建议收藏这些方法

我们在传输接收文件的时候,经常都是以PDF格式进行的,因为PDF格式具有很强的稳定性。那小伙伴们平时接收的时候,会不会发现有些PDF文件为了保密性会进行加密,如果我们经常需要使用它,就需要不断地输入密码,这…

ISCSLP 2022 | NPU-ASLP实验室8篇论文被录用

作为语音处理技术领域的旗舰国际会议,ISCSLP2022(International Symposium on Chinese Spoken Language Processing)将于12月11-14日在新加坡举办。 西工大音频语音与语言处理研究组(ASLPNPU)本届会议将携合作伙伴宣读论文8篇,涉…

计算机网络复习——第六章网络层

hhhhh 还是今天的我,今天把这两个肝了,准备27考试,耶耶耶!!!小h加油! 《计算机网络》(谢希仁)内容总结 (javaguide.cn) 重点知识: 域名系统(DN…

关于web前端大作业的HTML网页设计——我的班级网页HTML+CSS+JavaScript

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

Heterogeneous Parallel Programming 异构并行编程 - UIUC伊利诺伊大学(持续更新)

Lecture 11.2 Introduction to Heterogeneous异构1.3 Portability and Scalability1.4 Introduction to CUDA 数据并行化 and 执行模型1.5 Introduction to CUDA 内存模型 and 基本函数API1.6 Introduction to CUDA Kernel-based SPMDHeterogeneous Programming是采用不同类型的…

1.(vue3.x+vite)创建工程

前端技术社区总目录(订阅之前请先查看该博客) 前端技术社区:vue3.x+vite,node篇,前端小技术,前端资料篇等相关内容的介绍 1:使用vite生成项目模板 npm init vite-app myvue1 执行效果图: 2:package.json 调整依赖为最新版本 如下所示: 3:根目录下创建vite.c…

如何判断对象是否该被回收(引用计数法、可达性分析算法)

👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: JVM 🌈 算法类型:Hot100题 &#x1f30…

【图神经网络论文整理】(六)—— Universal Graph Transformer Self-Attention Networks

Dai Quoc Nguyen, Tu Dinh Nguyen, Dinh PhungThe ACM Web Conference 2022 (WWW 22)Computer Vision and Pattern Recognition论文地址 本文介绍的论文是《Universal Graph Transformer Self-Attention Networks》。 该篇文章的主要贡献是将Transformer应用在GNN中用于学习图…