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

news2024/9/25 15:30:04

前言

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.coloradmin.cn/o/31832.html

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

相关文章

cyclictest生成结果统计图

在用cyclictest测试实时性的时候通过输出的结果能清晰的看到最大值、最小值平均值,但具体的分布情况无法直接得到。 本文记录根据网上的博客实际测试结果。 1、先在开发板上运行测试程序 ./cyclictest -l 1000000 -m -Sp99 --policyfifo -h 25000 -q >output 得…

华为机试 - 高矮个子排队

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。 我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺…

专利变更需要哪些材料

一、专利变更需要哪些材料 专利权人变更专利的,需要提供著录项目变更请求书、著录项目变更证明材料、专科权人身份证明等材料。 《专利法实施细则》 第八十九条 国务院专利行政部门设置专利登记簿,登记下列与专利申请和专利权有关的事项: …

聚观早报|苹果高管称ipad在走下坡路;罗永浩新公司完成融资

今日要闻:苹果高管称ipad在走下坡路;罗永浩新公司完成融资;谷歌发布最新可持续发展成果;比亚迪新能源车涨价;惠普宣布裁员6千人 前苹果高管称ipad在走下坡路 据报道,前苹果公司高管让路易斯加塞近日表示&am…

无符号、有符号数运算判溢出

目录 无符号数的运算(溢出看CF) 有符号数运算(溢出看OF)(都是补码进行运算,因为补码的符号位可以直接参与运算一套电路就ok) 例题 第一题 第二题 无符号数的运算(溢出看CF&#…

会议信息管理系统SSM记录(六)

目录: (1)会议预定1 (2)会议预定2 (3)会议预约3 (4)会议预定4 (1)会议预定1 创建MeetingController: //跳转预定会议页面Request…

嵌入式面试题

1、写一个程序判断电脑是大端字序还是小端字序&#xff08;加量不加价&#xff09; #include <stdio.h> #include <arpa/inet.h> typedef unsigned char byte; typedef unsigned int word; int main(int argc, char *argv[]) {word val32 0x11223344;byte val8 …

业务流程管理包括什么

​什么是业务流程管理&#xff1f; 业务流程管理 (BPM)提供了一些用于发现、建模、分析、衡量、改进和优化业务策略及流程的方法。 在知名企业中&#xff0c;麦当劳是因为业务流程管理而获得成功的企业之一&#xff0c;标准化业务流程制度是麦当劳成功的关键。 麦当劳为了保证…

CAS号:2578-57-6,H2N-PG-OH

脯氨酸酶的底物(脯氨酸二肽酶)。 编号: 116803中文名称: 二肽Pro-Gly英文名: Pro-GlyCAS号: 2578-57-6单字母: H2N-PG-OH三字母: H2N-Pro-Gly-COOH氨基酸个数: 2分子式: C7H12N2O3平均分子量: 172.18精确分子量: 172.08等电点(PI): 6.11pH7.0时的净电荷数: -0.02平均亲水性: -疏…

MCE | 为什么肥胖经常被“针对”?

近年来&#xff0c;肥胖问题受到越来越多的关注&#xff0c;肥胖不只影响美丽身材&#xff0c;过度肥胖还可能导致肥胖症&#xff0c;这是很多疾病的高风险因素。所以肥胖是一种病&#xff1f;肥胖的标准是什么&#xff1f;别急&#xff0c;等小编慢慢道来。 认识肥胖症 (Obesi…

大数据毕设选题 - 深度学习口罩佩戴检测系统(python OpenCV YOLO)

文章目录0 前言1 课题介绍2 算法原理2.1 算法简介2.2 网络架构3 关键代码4 数据集4.1 安装4.2 打开4.3 选择yolo标注格式4.4 打标签4.5 保存5 训练6 实现效果6.1 pyqt实现简单GUI6.2 图片识别效果6.3 视频识别效果6.4 摄像头实时识别7 最后0 前言 &#x1f525; Hi&#xff0c…

通过ref进行组件间的通信

ref&#xff1a;绑定dom节点&#xff0c;拿到的就是dom对象&#xff1b; ref&#xff1a;绑定组件&#xff0c;拿到的就是组件对象&#xff1b; ref绑在dom节点上&#xff1a; //绑在dom上&#xff0c; <input type"text" ref"mytext"> <input…

SpringCloud微服务(十二)——Seata分布式事务

SpringCloud Alibaba Seata分布式事务 简介 Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务 官网&#xff1a;http://seata.io/zh-cn/ 一次业务操作需要垮多个数据源或需要垮多个系统进行远程调用,就会产生分布式事务问题…

PDF的两种密码忘记了,怎么解决

PDF文件带有两种加密方式&#xff0c;大家一定都很熟悉&#xff0c;因为大部分文件都有这两种加密方式&#xff0c;比如Word、Excel、PPT、压缩包等。PDF文件也有这两种密码。 那就是&#xff1a;打开密码、编辑限制 打开密码&#xff1a;就是在我们打开PDF文件的时候&#x…

聚焦离子束FIB测试的计量技术规范盘点

聚焦离子束系统采用聚焦的离子束对样品表面进行轰击&#xff0c;并由计算机控制离子束的扫描或加工轨迹、步距、驻留时间和循环次数&#xff0c;以实现对材料的成像、刻蚀、诱导沉积和注入的分析系统。其应用已经从界面检测扩展到纳米图像制备、透射样品制备、三维成像和分析、…

网络安全加固的必要性

随着信息化的快速变化&#xff0c;企业和机构面临网络安全威胁也越来越多&#xff0c;每一种安全防护措施就像是桶的一块木板&#xff0c;这个木桶中承载着的水就好比网络中运行的各种业务。各种业务能否安全、稳定地运转取决于最矮木板的高度和各块木板之间是否存在缝隙。为了…

加拿大Assignment写作格式技巧整理

对大部分同学来说&#xff0c;写Assignment就如同梦魇一般&#xff0c;让人望而却步。的确&#xff0c;写Assignment是一个大工程&#xff0c;需要为之付诸努力。但是也不必过于担心&#xff0c;小编在本文中主要讨论加拿大英文Assignment的格式及写作技巧&#xff0c;希望能对…

内网使用adb工具使用logcat进行日志分析

WorkTool自动化团队问题发现正文总结问题发现 我们在平时的安卓项目开发中&#xff0c;看日志和调试肯定都是通过 Android Studio 进行实时日志查看和过滤&#xff0c;但如果是部署在内网机器或其他原因不能方便的安装 Android Studio 想查看实时日志就有一定的困难&#xff0…

擎创技术流 | ClickHouse实用工具—ckman教程(4)

《使用CKman导入集群》 CKman&#xff08;ClickHouse Manager&#xff09;是由擎创科技自主研发的一款管理ClickHouse的工具&#xff0c;前端用Vue框架&#xff0c;后端使用Go语言编写。它主要用来管理ClickHouse集群、节点以及数据监控等&#xff0c;致力于服务ClickHouse分布…

双软企业认定需要什么条件

认定双软企业的好处 1、税收优惠:所得税两免三减半。双软认证企业&#xff0c;自获利年度起&#xff0c;第一年和第二年免征企业所得税&#xff0c;第三年至第五年减半征收企业所得税。 增值税超过3%的部分即征即退。 2、政策支持:各地政府对于科研专项资金、税收减免科技计划、…