MySQL 锁的内存结构

目录

1.摘要

2. 加锁的本质

3. 锁结构详解

3.1 锁所在的事务信息

3.2 索引信息

3.3 表锁/行锁信息

3.4 type_mode

3.5 其他信息

3.6 一堆比特位


1.摘要

在 MySQL 中,有很多种锁,例如行锁,表锁,页锁,全局锁,它们锁的粒度都不一样。更多情况下,我们只是关注这些锁的区别和作用,却很少关注它们本身,本篇我们就来简单了解一下MySQL 中锁的内存结构,锁中都包含了哪些信息。

2. 加锁的本质

在 Java 中,我们对一个代码块或一个方法进行加锁,锁住的都是唯一资源,是需要多个线程去进行争抢的;而在MySQL中,我们对一行记录去进行加锁,实质上是在内存结构中创建了一个锁结构与之相关联。

但这样就会出现一个问题。如果一个事务要对多条记录进行加锁,难道要生成多个锁结构吗?如果数据量过多,锁结构也随之增多,会出现大量的冗余,这么做合理吗?

当然是不合理的。因此,MySQL在对不同的记录进行加锁时,会对需要加锁的记录去做判断,如果符合下面这些条件,就会放在同一个锁结构中。

(一)在同一个事务中进行加锁操作;

(二)被加锁的记录在同一个页面中;

(三)加锁的类型是一样的;

(四)等待的状态是一样的;

可以先简单及以下这四句话,下面我会进行详细说明。

3. 锁结构详解

MySQL中有很多种存储引擎,这里我们以最为常用的InnoDB存储引擎为例说明,这也是因为只有InnoDB存储引擎支持行级锁。InnoDB存储引擎的锁结构如下所示,行级锁与表级锁的锁信息略有不同,其余信息都是一样的。

3.1 锁所在的事务信息

记录操作当前数据的事务信息(这里只是一个指针,通过指针我们可以获取当前事务的详细信息,例如事物的id,事务的隔离级别);

3.2 索引信息

对于行锁来说,需要记录加锁的记录属于哪个索引,这里也是一个指针;

3.3 表锁/行锁信息

表锁结构和行锁结构略有不同。表锁主要记录对那个表进行加锁;   行锁则记录了三个重要信息,分别是 表空间Space ID,页号Page Number,n_bits(对于行锁来说,一条记录就对应着一个比特位,一个页面中包含很多记录,用不同的比特位来区分到底是哪一条记录加了锁。为此在行锁结构的末尾放置了一堆比特位,这个n_bits属性代表使用了多少比特位,这里只是一个记录数,但不存放真正的比特位,真正的比特位是由最下面"一堆比特位"存放的);

3.4 type_mode

锁的模式(lock_mode)占用了低四位,可选值如下

LOCK_IS(十进制的0):表示共享意向锁,即 IS锁;

LOCK_IX(十进制的1):表示独占意向锁,即 IX锁;

LOCK_S(十进制的2):表示共享锁,即 S锁;

LOCK_X(十进制的3):表示独占锁,即 X锁;

LOCK_AUTO_INC(十进制的4):表示 AUTO-INC锁;

在InnoDB存储引擎中,LOCK_IS,LOCK_IX,LOCK_AUTO_INC 都算是表级锁的模式,LOCK_S,LOCK_X 既可以算是表级锁模式,也可以算作行级锁模式

锁的类型(lock_type),占用了第5~8位,不过现阶段只有第5位和第6位被使用:

LOCK_TABLE(十进制的16):也就是第5个比特位为1时,表示表级锁;

LOCK_REC(十进制的32):也就是第6个比特位为1时,表示行级锁;

锁的具体行为(rec_lock_type):使用其余位表示,只有在lock_type 值为LOCK_REC时,也就是该锁为行级锁时,才会细分为更多的类型,如下

LOCK_ORDINARY(十进制的8):表示 next-key 锁;

LOCK_GAP(十进制的512):也就是当第十个比特位为1时,表示GAP锁;

LOCK_REC_NOT_GAP(十进制的1024):即当第11个比特位为1时,表示正经记录锁;

LOCK_INSERT_INTENTION(十进制的2048):即当第12个比特位为1时,表示插入意向锁

:也在这个32位数字中;

LOCK_WAIT(十进制的256):即我们上面提到的等待状态,IS_WAITING(是否处于等待状态)表示第九个比特位为1时,为true,当前事务还尚未获取到锁,正处于等待状态;为0即false时,表示当前事务获取锁成功;

3.5 其他信息

为了更好地管理系统运行过程中生成的各种锁结构而设计了各种哈希表和链表;

3.6 一堆比特位

对应上面第三条行锁信息,在行锁结构中,末尾还放置了一堆比特位,比特位的数量就是有上面的 n_bits 来决定的,InnoDB数据页中的每条记录在记录头信息中都包含了一个heap_no 属性,伪记录Infimum的heap_no值为0,Supermum的heap_no值为1,之后插入每条记录,heap_no的值就增加1。锁结构最后的一堆比特位就对应着一个页面中的记录,一个比特位映射一个heap_no,即一个比特位映射到业内的一条记录。

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

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

相关文章

MyBatis Plus:自定义typeHandler类型处理器

目录 引言:关于TypeHandler PostGreSQL:JSON数据类型 PostGreSQL数据库驱动:PGobject类 TypeHandler类型处理器 自定义类型处理器 类型处理器实现:PGJsonTypeHandler 注册类型处理器 引言:关于TypeHandler MyBa…

Sui在Dacade推出Move课程,完成学习奖励SUI

Dacade推出了一门Sui开发者课程,通过一系列引人入胜的挑战,为开发者提供了一个沉浸式的Move技术之旅。在这门课程中,Dacade的教育材料将引导用户利用Sui强大的DeFi原生功能(包括DeepBook和zkLogin)构建DeFi应用。此外&…

提升VR全景摄影画质的8个因素

如今VR全景拍摄的门槛已经很低,包括无人机、全景相机等都具有一键全景的功能。很多初次接触VR全景拍摄的朋友会发现同样的设备,为啥拍出来的效果就不如别人呢? 其实,要提升VR全景拍摄质量,只需要了解以下几个环节&…

基于多种机器学习模型的西北地区蒸散发模拟与趋势分析_季鹏_2023

基于多种机器学习模型的西北地区蒸散发模拟与趋势分析_季鹏_2023 摘要关键词 1 资料和方法1. 1 研究区域与观测数据1. 2 机器学习模型构建与验证方法1. 3 SHAP 可解释性方法 2 主要结果2. 1 不同模型的模拟性能和泛化能力2. 2 不同模型的可解释性分析2. 3 5 km 分辨率格点蒸散发…

Newtonsoft.Json设置忽略某些字段

using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace TestProject1 {/// <summary>/// 输出json时&#xff0c;设置忽略哪些…

【Flink状态管理(六)】Checkpoint的触发方式(1)通过CheckpointCoordinator触发算子的Checkpoint操作

文章目录 一. 启动CheckpointCoordinator二. 开启CheckpointScheduler线程三. 触发Checkpoint1. Checkpoint执行前的工作2. 创建PendingCheckpoint3. Checkpoint的触发与执行 四. Task节点的Checkpoint操作1. 触发准备2. 调用TaskExecutor执行Checkpoint操作 五. 在StreamTask中…

鸿蒙Next怎么升级,有便捷的方法?

早在2023年11月&#xff0c;市场上有自媒体博主表示&#xff0c;华为HarmonyOS NEXT的升级计划是2X年底到2X年初完成一亿部&#xff0c;2X年底完成三亿部。虽然该博主没有明确具体年份&#xff0c;但预计是2024年底2025年初升级一亿部HarmonyOS NEXT设备&#xff0c;2025年底完…

上门服务小程序系统|多元化服务和高效便捷的服务体验

现代社会的快节奏生活让人们越来越追求便捷与效率&#xff0c;而上门服务系统应运而生&#xff0c;成为了现代人生活中的新选择。通过在家就能享受各种服务&#xff0c;不仅省时省力&#xff0c;还能提供个性化的服务体验。 上门服务系统的出现&#xff0c;使得各类家政、维修…

盲盒小程序开发,线上盲盒平台的发展潜力

盲盒的出现给大众带来了全新的消费体验&#xff0c;目前&#xff0c;盲盒经济也是席卷了当代年轻人&#xff0c;一种新的商业模式就此出现。盲盒的玩法、种类也在不断创新进化&#xff0c;成为了吸引大众的消费形式。 当然&#xff0c;在当下盲盒稳步发展时期&#xff0c;也要…

Collection集合体系(ArrayList,LinekdList,HashSet,LinkedHashSet,TreeSet,Collections)

目录 一.Collection 二.List集合 三.ArrayList集合 四.LinkedList集合 五.Set集合 六.hashSet集合 七.LinkedHashSet集合 八.TreeSet集合 九.集合工具类Collections 集合体系概述 单列集合&#xff1a;Collection代表单列集合&#xff0c;每个元素&#…

【云安全】Hypervisor与虚拟机

Hypervisor 也被称为虚拟机监视器&#xff08;Virtual Machine Monitor&#xff0c;VMM&#xff09;&#xff0c;主要作用是让多个操作系统可以在同一台物理机上运行。 Type-1 Hypervisor 与 Typer-2 Hypervisor Type-1 Hypervisor 直接安装在物理服务器上&#xff0c;不依赖…

onlyoffice基础环境搭建+部署+demo可直接运行 最简单的入门

office这个体系分为四个大教程 1、【document server文档服务器基础搭建】 2、【连接器(connector)或者jsApi调用操作office】-进阶 3、【document builder文档构造器使用】-进阶 4、【Conversion API(文档转化服务)】-进阶 如果需要连接器&#xff0c;可以查看&#xff1a;onl…

R语言【base】——nrow(),ncol(),NCOL(),NROW():返回数组的行数/列数

Package base version 4.2.0 Description nrow和nrow返回x中存在的行数或列数。ncol和nrow将向量处理为1列矩阵&#xff0c;甚至是0列长度的向量&#xff0c;与as.matrix()或cbind()兼容&#xff0c;参见示例。 Usage nrow(x) ncol(x) NCOL(x) NROW(x) Arguments 参数【x】&…

IO进程线程day4

1.思维导图 2.使用多进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半&#xff0c;子进程拷贝后一半&#xff0c;父进程回收子进程的资源。 #include<myhead.h>int main(int argc, const char *argv[]) {//判断终端输入的参数是否合法if(argc!3){printf("input…

计算机网络Day1--计算机网络体系

1.三网合一 电信网络、广播电视网络、计算机网络&#xff08;最基础最重要发展最快&#xff09; 2.Internet 名为国际互联网、因特网&#xff0c;指当前全球最大的、开放的、由众多网络相互连接而成的特定互连网&#xff0c;采用TCP/IP 协议族作为通信的规则&#xff0c;前…

stm32——hal库学习笔记(定时器)

这里写目录标题 一、定时器概述&#xff08;了解&#xff09;1.1&#xff0c;软件定时原理1.2&#xff0c;定时器定时原理1.3&#xff0c;STM32定时器分类1.4&#xff0c;STM32定时器特性表1.5&#xff0c;STM32基本、通用、高级定时器的功能整体区别 二、基本定时器&#xff0…

【C++】1143 - 纯粹合数

问题 一个合数&#xff0c;去掉最低位&#xff0c;剩下的数仍是合数&#xff0c;再去掉剩下的数的最低位&#xff0c;余留下来的数还是合数&#xff0c;这样反复&#xff0c;一直到最后剩下的一位数仍是合数&#xff1b;我们把这样的数称为纯粹合数。求所有的三位纯粹合数。 1…

代码随想录算法训练营第三十七天丨738. 单调递增的数字、968. 监控二叉树

738. 单调递增的数字 AC了&#xff0c;很快&#xff01;但是又忘记可以从后向前遍历了&#xff01;&#xff01;&#xff01; class Solution:def monotoneIncreasingDigits(self, n: int) -> int:if n < 9: return nn_list [ord(x) - ord(0) for x in str(n)]n_len …

多目图像拼接算法

图像拼接一般要经过图像特征提取、特征匹配、融合等步骤来实现。 特征匹配与变换: SIFT(尺度不变特征变换)SURF(加速鲁棒特征)ORB(Oriented FAST and Rotated BRIEF)AKAZE(加速的KAZE特征)全景图像拼接算法: 基于特征匹配的拼接:利用特征点匹配找到重叠区域,然后进…

YOLO-World:实时开放词汇目标检测

paper&#xff1a;https://arxiv.org/pdf/2401.17270.pdf Github&#xff1a;GitHub - AILab-CVC/YOLO-World: Real-Time Open-Vocabulary Object Detection online demo&#xff1a;https://huggingface.co/spaces/stevengrove/YOLO-World 目录 0. 摘要 1. 引言 2. 相关工…