美团一面:能不能通俗的解释下为什么要有意向锁这个东西?

news2024/7/6 19:16:30

面试真题,用通俗的例子解释清楚 MySQL 为什么有了表锁和行锁之后,还要引入意向锁

众所周知,InnoDB 中既有读锁也有写锁,也称为共享锁和排他锁,这两种锁既可以加在整张表上,也可以加在行上。

MySQL 自身就提供了表锁的能力:

  • 读锁:LOCK TABLE table_name READ 用读锁锁表,会阻塞其他事务的写操作

  • 写锁:LOCK TABLE table_name WRITE 用写锁锁表,会阻塞其他事务的读和写操作

行锁是 InnoDB 存储引擎提供的,MySQL 本身并不提供行级锁的能力:

  • 读锁,如 SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE 加行级读锁,会阻塞其他事务对该行记录的写操作

  • 写锁,如 SELECT * FROM table_name WHERE ... FOR UPDATE 加行级写锁,会阻塞其他事务对该行记录的的读和写操作

又有表锁又有行锁,我们来考虑下这两种类型的锁共存的问题。看下面这个例子:

事务 A 加了行级读锁,锁住了表中的一行,让这一行只能读,不能写。

之后,事务 B 尝试申请整个表的写锁。

如果事务 B 申请成功,那么理论上它就能修改表中的任意一行,这与 A 持有的行级读锁是冲突的。

数据库需要避免这种冲突,就势必要让 B 的申请被阻塞,直到 A 释放行级读锁。

那数据库要怎么判断这个冲突呢?

  • 步骤 1:判断表是否已被其他事务用表级锁锁住了整张表

  • 步骤 2:判断表中的每一行是否已被行级锁锁住

看起来没有什么困难的,但请注意步骤 2,判断表中的每一行,各位,如何判断?

显然,需要遍历!遍历表中的每一行。

小学生都能想到这样的判断方法效率实在太过于低下了。

于是就有了意向锁!

我们先来看下意向锁的解释:

Intention locks are table-level locks that indicate which type of lock (shared or exclusive) a transaction requires later for a row in a table.

意向锁是一个表级锁,其作用就是指明接下来的事务将会用到哪种锁。

有两种意向锁:

  • 意向共享锁/读锁(IS Lock):当事务想要获得一张表中某几行的读锁(行级读锁)时,InnoDB 存储引擎会自动地先获取该表的意向读锁(表级锁)

  • 意向排他锁/写锁(IX Lock):当事务想要获得一张表中某几行的写锁(行级写锁)时,InnoDB 存储引擎会自动地先获取该表的意向写锁(表级锁)

注意这里的自动:申请意向锁的动作是数据库完成的,就是说,事务 A 申请一行的行锁的时候,数据库会自动先开始申请表的意向锁,不需要我们程序员使用代码来申请。

在意向锁存在的情况下,事务 A 如果想申请行级读锁,就必须先申请该表的意向读锁,申请成功后才能继续申请某行记录的行级读锁。

在意向锁存在的情况下,上面的判断可以改成:

  • 步骤 1(不变):判断表是否已被其他事务用表级锁锁住了整张表

  • 步骤 2:发现表上有意向读锁(说明表中有些行被行级读锁锁住了),意向读锁和表级写锁互斥,因此,事务 B 申请表的写锁会被阻塞。

也就是说原先步骤 2 的遍历表中每一行的操作,简化成了判断下整张表上有无表级意向锁就行了,效率大幅提升。

这就是为什么要有意向锁了。

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

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

相关文章

【Apifox】设置apiFox自动获取token

文章目录问题描述解决方案注意事项参考文章问题描述 接口测试时,每次都需要手动登录获取token,先登录系统,从浏览器中复制token,再到apifox的接口上把token帖上去,然后才能去测试具体的接口;更麻烦的是&am…

【实时数仓】热度关键词接口、项目整体部署流程

文章目录一 热度关键词接口1 Sugar配置(1)图表配置(2)接口地址(3)数据格式(4)执行SQL2 数据接口实现(1)创建关键词统计实体类(2)Mappe…

小黑hbase终于勉强跑到了自己的m1 Macbook上啦,虽然终端用不了,但是能从happybase访问的日常积累:happybase简单使用

1.happybase连接 # 连接操作 import happybase# 建立连接 con happybase.Connection(localhost, 9090) con.open() # 输出所有表名称 print(con.tables()) # 关闭传输 con.close() con.open()2.创建表格 # 创建表格 con happybase.Connection(localhost, 9090) # 默认9090…

Android 图像混合技术

Android 图像混合技术 色彩知识 色彩 光学三原色 光学三原色由:红、绿、蓝组成。 色值分别是: 红(red ):#FF0000 RGB(255,0,0)绿(green)&am…

第十九讲:神州路由器基础知识

路由器简介路由器(Router)是连接Internet中多个网络或网段的网络设备,它能将不同网络或网段之间的数据信息进行“翻译”,以使它们能够相互“读”懂对方的数据,实现不同网络或网段的互联互通。此外,它会根据…

数据平台建设指南(上)

前言 年底了,整理了下过去做的一些项目,希望能够给大数据行业的同学提供些大数据平台建设的思路。内容大致分五部分:数据采集,数据存储、数据计算、基础平台以及数据治理篇。由于涉及到的内容较多,打算分成两篇文章&am…

PHY驱动注册部分

SOC可以对PHY 进行配置或者读取PHY 相关状态,这个就需要 PHY 内部寄存器去实现了。PHY 芯片寄存器地址空间为 5位(支持访问32个寄存器).IEEE 定义了0~15这 16个寄存器的功能。而 16~31这16 个寄存器由厂商自行实现。 就是说不管你用的哪个厂家的 PHY 芯…

SAP ABAP——SAP简介(三)【S/4 HANA开发环境】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…

linux常用命令(三)-目录操作

目录创建 - mkdir 我们可以使用mkdir(make directory)来创建目录。 示例 目录删除 - rm 可以使用rm(remove)来删除一个目录 语法 rm [-irf] name ...i:删除前逐一询问确认r:将目录及以下之档案亦逐一删…

转转AB平台的设计与实现

导读 在数据驱动时代,不管是在产品功能迭代还是策略决策时都需要数据的支撑。那么,当我们准备上线一个新功能或者策略时,如何评估新老版本优劣,即数据的可量化就成了问题。这个时候就需要引入 A/B Test 了。 一、A/B Test 是什么…

Tomcat基本用法

Tomcat基本用法一、Tomcat 是什么二、下载安装三、目录结构四、启动服务器五、部署静态页面一、Tomcat 是什么 汤姆猫? 事实上,Java 世界中的 “汤姆猫” 完全不是一回事,但是同样大名鼎鼎 ~ Tomcat 是一个 HTTP 服务器。 前面我们已经学…

公司如何做好舆情监控,舆情监控解决方案有哪些?

随着互联网快速发展,企业网络舆情动态成为决策发展的重要依据,所以做好网络舆情监控至关重要,接下来TOOM舆情监测小编带您简单了解公司如何做好舆情监控,舆情监控解决方案有哪些? 一、公司如何做好舆情监控 舆情监控是指通过不…

Spring Boot 使用 SpringDoc 库的 Swagger3.0

Swagger 定义 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步…

房产管理系统平台安全性分析?

房产管理系统是数图互通公司自主研发的FMCenterV5.0平台,是针对中国高校房产的管理特点和管理要求,研发的一套标准产品;通过在中国100多所高校的成功实施和迭代,形成了一套成熟、完善、全生命周期的房屋资源管理解决方案。 以下是…

FL Studio21电脑版免费音乐编曲宿主软件下载

编曲主要考验电脑的处理器(CPU)性能、声卡。所以配置电脑的时候有条件的伙伴可以着重考虑这两方面。现在市面上惠普、戴尔、华为、苹果等品牌的电脑,在四五千这个范围的商务本,就可以胜任编曲工作。但是在一些较为庞大的工程中可能…

SolarMesh(微服务监管平台)安装教程

SolarMesh简介 SolarMesh是基于服务网格构建的微服务监管平台。SolarMesh基于 Istio 及容器技术,提供微服务流量监控和管理,提供完善的非侵入式服务治理解决方案,在提供Istio流量管理等基础能力外,还提供多集群纳管、监控告警、W…

为什么全球科技巨头都在布局超高清?

我们能明显地感受到,进入21世纪以来,影像视频所占用人类生活的时间、空间已达到人类诞生以来的最大值。根据《2022全球互联网现象报告》,2021年流媒体视频占互联网带宽流量的53.7%,比2020年提升了4.8%。衣食住行,休闲娱…

十亿人都在用的健康码,运维体系是怎么设计的?

导读|随着疫情防控模式的迭代,健康码访问DAU逐渐趋于下跌,意味着健康码将逐步完成历史使命,见证着疫情的结束。本文特邀腾讯研发工程师李雄政将从技术架构、可观测体系、运营保障体系等运维体系多方面,总结回顾健康码业…

骨传导耳机到底怎么样,五款好用的骨传导耳机推荐

还有很多人不知道骨传导耳机使用感受到底如何,骨传导耳机是开放式的听音方式,在使用骨传导耳机时,会更加安全、耳机的声音相对于入耳式的声音会更加具有空间立体感,具体使用感感受到底如何,看下文大家就有一定的了解了…

服务器ssl证书升级

最近服务器扫描出ssl证书是使用弱哈希算法签名的SSL证书(CVE-2004-2761)【原理扫描】,要求联系证书颁发机构重新颁发证书。使用弱哈希算法签名SSL证书的端口有1433,3389。所有要对这俩端口配置一个新的证书。算法且满足sha256。 下面是我我服务器证书升…