当前位置: 首页 > news >正文

【快速复习】一文看懂 Mysql 核心存储 隔离级别 锁 MVCC 机制

一文看懂 Mysql 核心存储 & 隔离级别 & 锁 & MVCC 机制

Mysql InnoDB 引擎下核心存储

数据&索引存储 IBD 文件

mysql 实际存储采用 B+ 树结构。

B+ 树是一种多路搜索树,其搜索性能高于 B 树

  1. 所有叶节点在同一深度,保证搜索效率
  2. 仅叶节点存储实际数据,其他节点仅存储索引不存储数据,节省空间可存储更多索引
  3. 每个节点存储一组数据,这组数据由小到大排列
  4. 叶子节点用双向指针链接,提高区间访问效率
  5. 在 B+ 树中,索引数据可能会被冗余存储

推荐一个在线构建 B+ 树的网址 https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
在这里插入图片描述

在 mysql 中,一个节点也可以成为一页 ,这个节点数据默认最大 16kb = 16384 byte

SELECT @@innodb_page_size; 

可以用这个语句查询。

所以在 mysql 中实际的数据存储就是以 B+ 树索引的形式存储的,叶子节点带有所有数据,索引字段是主键 id。

其他非主键索引,叶子节点带有的是主键数据和索引数据,如果要查询列表不包含在索引字段内,会进行”回表“去查询遍主键索引获取所需要的数据,所以有时候优化查询速度时会考虑简历覆盖索引避免回表。

缓存&日志

在这里插入图片描述

mysql 在实际存储和操作时并非直接操作磁盘,这样效率太慢了。

所以基本上优化磁盘速度 --> 使用内存缓存

内存不可靠问题 --> 顺序写日志

在内存缓存上:

  1. BufferPool:数据的增删改查都是直接操作 BufferPool ,比如查询时会直接 load 相关的一页数据到 BufferPool 中
  2. RedoLogBuffer:写 redolog 的缓冲区,在合适的时机高效批量写入 如 COMMIT 操作时、执行 CHECKPOINT 操作时(MySQL 内部定期执行的一种操作)

在日志上:

  1. undolog(InnoDB):用于一个事务中执行失败时的回滚操作以及在可见级别为 可重复读和读已提交MVCC 机制的实现
  2. redolog(InnoDB):用于在故障时重放没有同步到磁盘的操作数据,同步数据到 binlog 后会将数据清除
  3. binlog:记录全量数据日志,用于恢复磁盘数据

MySQL 会在以下情况下将 redolog 中的数据同步到 binlog 中:

  1. 执行 COMMIT 操作时。
  2. 执行 FLUSH LOGS 操作时。
  3. 执行 FLUSH BINARY LOGS 操作时。
  4. 执行 FLUSH TABLES 操作时。
  5. 执行 FLUSH TABLES WITH READ LOCK 操作时。
  6. 执行 FLUSH RELAY LOGS 操作时。
  7. 执行 FLUSH RELAY LOGS WITH READ LOCK 操作时。
  8. 执行 FLUSH MASTER 操作时。

最终存储 IBD

IBD 文件是 MySQL 中用于存储表数据的文件,它以索引形式存储数据

事务隔离级别

在并发多事务的情况下数据的读写更新会存在一些问题,这与我们设置的隔离级别息息相关。

  1. 脏写:指在一个事务中,更新了一行数据,但是这一行数据还没有提交,另一个事务也更新了这一行数据, 新的事物覆盖了旧事物写的值,导致旧事物的更新失效
  2. 脏读:事务 A 读到了 事务 B 修改但未提交的数据
  3. 不可重复读: 事务 A 内部相同查询语句查询结果不同,读到了其他事务已提交的数据
  4. 幻读:事务 A 读取到了事务 B 新增的数据

mysql 支持的事务隔离级别

在这里插入图片描述

默认的隔离级别是 可重复读 也是我们最常用的隔离级别。

表锁&行锁&间隙锁

在不同的纬度上 mysql 的锁分很多种:

性能上:

  1. 悲观锁
  2. 乐观锁(版本比较)

操作分类上

  1. 读锁 共享做 S 锁
  2. 写锁 排他锁 X 锁

锁粒度上

  1. 表级锁
  2. 行锁
  3. 间隙锁

在 innodb 引擎下聊聊锁

表锁

锁全表的情况一般出现在表结构变更时,或者手动 lock table 时

如果一个事务需要更新多行,MySQL 会尝试加上一个表锁

行锁

在写数据是会对该行数据加行锁即 在执行INSERT/UPDATE/DELETE语句时

无索引行进行 update 行锁可能会升级为表锁

间隙锁

在更新数据时,在此数据与其他数据存在的空隙加锁,如 存在 id = 1 ,3, 5 的数据

此时更新 3 号数据,会锁 (1,3)(3,5) 这两个区间,无法插入数据,这就是间隙锁,可以解决一部分幻读问题

而 3 号数据在更新所以这个行会加行锁

行锁 + 对应的间隙锁 也称之为 临键锁。

MVCC 机制

这个机制是保证可重复读和读已提交的核心机制。是基于 undolog 版本链 以及 一致性视图 read-view

undo日志版本链是指一行数据被多个事务依次修改过后,在每个事务修改完后,Mysql会保留修改前的数据 undo 回滚

日志,并且用两个隐藏字段 trx_id 和 roll_pointer 把这些 undo日志串联起来形成一个历史记录版本链。

而一致性视图是在一个事务开启后,执行任何查询 sql 时进行生成,read-view 会生成当前所有未提交事务的 id

而在 undolog 中 trx_id 小于未提交事务 id 的记录都是已提交记录是可读的,而大于最大 id 的是视图生成时未开始的事务 不可读

如果 min_id < trx_id < max_id 且不在未提交数组中,则也是可读的

相关文章:

【快速复习】一文看懂 Mysql 核心存储 隔离级别 锁 MVCC 机制

一文看懂 Mysql 核心存储 & 隔离级别 & 锁 & MVCC 机制 Mysql InnoDB 引擎下核心存储 数据&索引存储 IBD 文件 mysql 实际存储采用 B 树结构。 B 树是一种多路搜索树&#xff0c;其搜索性能高于 B 树 所有叶节点在同一深度&#xff0c;保证搜索效率仅叶节…...

面试题----集合

概述 从上图可以看出&#xff0c;在Java 中除了以 Map 结尾的类之外&#xff0c; 其他类都实现了 Collection 接⼝。 并且&#xff0c;以 Map 结尾的类都实现了 Map 接⼝List,Set,Map List (对付顺序的好帮⼿)&#xff1a; 存储的元素是有序的、可重复的。 Set (注重独⼀⽆⼆…...

XSS注入基础入门篇

XSS注入基础入门篇1.XSS基础概念2. XSS的分类以及示例2.1 反射型XSS2.1.1 示例1&#xff1a;dvwa low 级别的反射型XSS2.1.2 攻击流程2.2 DOM型XSS2.2.1 示例2&#xff1a;DOM型XSS注入1.环境部署2.基础版本3.进阶绕过2.3 存储型XSS2.3.1 示例1&#xff1a;dvwa low示例2.3.2 攻…...

刷题 - 数据结构(二)链表

1. 链表 1.1 题目&#xff1a;合并两个有序链表 链表的建立与插入&#xff1a;关键在于留出头部&#xff0c;创建迭代指针。 ListNode* head new ListNode; // 通过new 创建了一个数据类型为ListNode的数据 并把该数据的地址赋值给ListNodeListNode* p 0; // 再创建一个数据…...

用于隔离PWM的光耦合器选择和使用

光耦合器&#xff08;或光隔离器&#xff09;是一种将电路电隔离的器件&#xff0c;不仅在隔离方面非常出色&#xff0c;而且允许您连接到具有不同接地层或在不同电压电平下工作的电路。光耦合器具有“故障安全”功能&#xff0c;因为如果受到高于最大额定值的电压&#xff0c;…...

面试完阿里,字节,腾讯的测试岗,复盘以及面试总结

前段时间由于某些原因辞职了&#xff0c;最近一直在面试。面试这段时间&#xff0c;经历过不同业务类型的公司&#xff08;电商、酒店出行、金融、新能源、银行&#xff09;&#xff0c;也遇到了很多不同类型的面试官。 参加完三家大厂的面试聊聊我对面试的一些看法&#xff0…...

分享一个外贸客户案例

春节期间一个外贸人收到了客户的回复&#xff0c;但因为自己的处理方式造成了一个又一个问题&#xff0c;我们可以从中学到一些技巧和知识。“上次意大利的客人询价后&#xff0c;一直没回复&#xff08;中间有打过电话&#xff0c;对方说口语不行&#xff0c;我写过邮件跟进过…...

【Kubernetes】第二篇 - 购买阿里云 ECS 实例

一&#xff0c;前言 上一篇&#xff0c;简单介绍了 CI/CD 的概念以及 ECS 服务规划&#xff0c;搭建整套服务需要三台服务器&#xff0c;配置如下&#xff1a; ECS 配置启动服务说明2核4GJenkins Nexus Dockerci-server2核4GDocker Kubernetesk8s-master1核1GDocker Kube…...

数影周报:据传国内45亿条快递数据泄露,聆心智能完成Pre-A轮融资

本周看点&#xff1a;据传国内45亿条快递数据泄露&#xff1b;消息称微软解雇150 名云服务销售&#xff1b;消息称TikTok计划在欧洲再开两个数据中心&#xff1b;衣服长时间放购物车被淘宝客服嘲讽&#xff1b;聆心智能完成Pre-A轮融资......数据安全那些事据传国内45亿条快递数…...

Leetcode力扣秋招刷题路-0073

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 73. 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;mat…...

遥感数字图像处理

遥感数字图像处理 来源&#xff1a;慕课北京师范大学朱文泉老师的课程 遥感应用&#xff1a;遥感制图、信息提取 短期内了解知识结构–>有选择的剖析经典算法原理–>系统化知识结构、并尝试实践应用 跳出算法&#xff08;尤其是数学公式&#xff09; 关注原理及解决问…...

深度学习常用的python函数(一)

由于我只简单的学过python和pytorch&#xff0c;其中有很多函数的操作都还是一知半解的&#xff0c;其中有些函数经常见到&#xff0c;所以就打算记录下来。 1.zip zip(*a):针对单个可迭代对象压缩成n个元组&#xff0c;元组数量n等于min(a中元素的最小长度) a [(1, 2), (3…...

2023年美国大学生数学建模A题:受干旱影响的植物群落建模详解+模型代码(一)

目录 前言 一、题目理解 背景 解析&#xff1a; 要求 二、建模 1.相关性分析 2.相关特征权重 只希望各位以后遇到建模比赛可以艾特认识一下我&#xff0c;我可以提供免费的思路和部分源码&#xff0c;以后的数模比赛只要我还有时间肯定会第一时间写出免费开源思路&…...

PPS文件如何转换成PPT?附两种方法

在工作中&#xff0c;PPS文件的使用还是很广泛的&#xff0c;因为作为幻灯片放映文件&#xff0c;点击后就能直接播放&#xff0c;十分方便。但如果想要修改PPS里的内容&#xff0c;PPS是无法编辑的&#xff0c;我们需要把文件转换成PPT&#xff0c;再进行修改。 那PPS文件如何…...

ParallelsDesktop安装【亲测可行】

我这边安装的是macos最新系统 (Ventura13.2) 本文参考这篇文章安装&#xff0c;但是你完全按照这篇文章会报错&#xff0c;具体可行操作记录如下 一、下载软件和补丁 1、点这里去下载补丁18.0.1 2、点这里去下载对应版本的ParallelsDesktop18.0.1&#xff0c;安装上到试用这里…...

在 Python 中只接受数字作为用户输入

只接受数字作为用户输入&#xff1a; 使用 while True 循环进行循环&#xff0c;直到用户输入一个数字。使用 float() 类尝试将值转换为浮点数。如果用户输入了一个数字&#xff0c;请使用 break 语句跳出循环。 while True:try:# &#x1f447;️ use int() instead of floa…...

【集合】JAVA基础篇(二)

目录一、java常用集合1、Java集合接口的作用2、Java集合常用实现类的作用二、Collection 常用的方法三、List 集合接口1、ArrayList类的常用方法2、LinkList类中的方法3、Vector4、ArrayList 类和 LinkedList 类的区别四、Set 集合1、HashSet 类2、TreeSet 类3、HashSet 和 Tre…...

机房意外掉电导致Elasticsearch的部分index无数据的修复过程

环境 :华为大数据集群FusionInsight V100R002C800SPC200、Elasticsearch 6.1.3、Kibana问题产生原因&#xff1a;因机房意外掉电导致集群部分机器两次掉电导致Elasticsearch重启&#xff0c;Elasticsearch重启后看似正常但某些index无数据。经排查判断为Elasticsearch的部分ind…...

Spring入门案例三:注解进行引用类型的自动装配

本系列文章将会带领大家进行Spring的全面学习&#xff0c;持续关注我&#xff0c;不断更新中… 一.案例分级 简单解析:配置类替代以前的配置文件&#xff0c;实体类提供对象&#xff0c;业务类中有实体类的引用对象&#xff0c;在业务层中实现引用类的自动装配。 二.各层代码…...

kubernet + kubevirt + ceph 汇总文档

目的 1 创建 kubenetes 集群 2 kubenetes 集群上部署 kubevirt 3 kubernetes 支持 ceph 存储 4 VMI 可以存储在 ceph rbd 存储中并正常使用 参考部署文档 名称连接备注centos8 + kubernetes 1.24 master/node 节点部署文档kubernetes 集群部署kubectl top node 使用方法部署文档…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。

2024 年&#xff0c;高端封装市场规模为 80 亿美元&#xff0c;预计到 2030 年将超过 280 亿美元&#xff0c;2024-2030 年复合年增长率为 23%。 细分到各个终端市场&#xff0c;最大的高端性能封装市场是“电信和基础设施”&#xff0c;2024 年该市场创造了超过 67% 的收入。…...

前端工具库lodash与lodash-es区别详解

lodash 和 lodash-es 是同一工具库的两个不同版本&#xff0c;核心功能完全一致&#xff0c;主要区别在于模块化格式和优化方式&#xff0c;适合不同的开发环境。以下是详细对比&#xff1a; 1. 模块化格式 lodash 使用 CommonJS 模块格式&#xff08;require/module.exports&a…...

深度解析云存储:概念、架构与应用实践

在数据爆炸式增长的时代&#xff0c;传统本地存储因容量限制、管理复杂等问题&#xff0c;已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性&#xff0c;成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理&#xff0c;云存储正重塑数据存储与…...

【题解-洛谷】P10480 可达性统计

题目&#xff1a;P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图&#xff0c;分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M&#xff0c;接下来 M M M 行每行两个整数 x , y x,y x,y&#xff0c;表示从 …...