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

【MySQL】什么是意向锁 IS IX 及值得学习的思想

文章目录

    • 前言
    • 行锁和表锁
    • 使用意向锁
    • 意向锁的算法
    • 意向锁的思想
    • JDK 中相似的思想

前言

之前看 MySQL 都刻意忽略掉了 IS 和 IX 锁,今天看 《MySQL 是怎样运行的》,把意向锁讲的很通透,本篇博文提炼一下思想。

  • I: Intention Lock(意向锁)
  • S: Shared
  • X: Exclusive

行锁和表锁

InnoDB 提供事务能力,支持行锁。该引擎在并发读写数据时,让DDL语句安全执行,一般要4步:

  1. 确认表中是否有表锁
  2. 遍历每一行,确认表中是否有行锁
  3. 等待行锁全部释放
  4. 加表锁

使用意向锁

InnoDB 用意向锁取代普通表锁的用意是:

  • DDL语句执行前,避免遍历大量行数据才能确认加锁

EG: 10000 行的表,事务A在9500行加了个行锁。事务B执行DDL要加表锁,遍历9500次才确认该表有行锁,要阻塞等待。

意向锁的算法

想法非常简单,每次为表加行锁的时候,先加一个表级意向锁。

EG1: 10000 行的表,在9500行加了个行级 S 锁前,先加一个表级的 IS 锁。释放的时候同时释放
同理,加行级 X 锁前,先加一个表级 IX 锁。

引入意向锁后,让DDL语句安全执行,一般需要3步:

  1. 确认表是否有意向锁
  2. 等待意向锁释放
  3. 加表锁

意向锁的思想

  • 把 O(n) 的时间复杂度缩小到 O(1)
    在这里插入图片描述

JDK 中相似的思想

该链表的size方法不是实时计算的,而是每次添加元素都为一个遍历自增。与传统的数据结构O(n)遍历链表不同,这个信息量只需要 O(1) 的复杂度

java.util.ArrayList#size
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/20985.html

相关文章:

  • python多线程实现
  • macOS使用CodeRunner快速配置fortran环境
  • 【云原生】k8s 离线部署讲解和实战操作
  • 【Kubernetes】第十一篇 - 滚动发布的介绍与实现
  • 【尊享版】如何系统构建你的思维认知模型?
  • urho3D编码约定
  • Overleaf推广奖励:增加合作者的数量、解锁Dropbox同步和项目修改历史
  • ChatGPT的互补工具Perplexity的详细使用方法(持续更新)
  • 【Linux驱动开发100问】如何编译Linux内核?
  • 15、条件概率、全概率公式、贝叶斯公式、马尔科夫链
  • Eureka服务注册与发现
  • 20230226 引用类型和指针类型的区别 - chatGPT
  • 《操作系统》——第二章 进程与线程
  • 网络原理之初识
  • CAN总线开发一本全(4) - FlexCAN的驱动程序
  • 如何分析linux tcp/ip 丢包问题
  • 旅游规划(树型dp)
  • 【C++】string类的模拟实现
  • 笔记(一)——STL容器
  • 红黑树
  • RIP路由协议的更新(电子科技大学TCP/IP第二次实验)
  • 基于JWT实现用户身份认证
  • SaltStack 远程命令执行漏洞(CVE-2020-16846)
  • SAP 详细解析成本收集器
  • Vision Transformer学习了什么-WHAT DO VISION TRANSFORMERS LEARN? A VISUAL EXPLORATION
  • 一种全新的图像滤波理论的实验(三)
  • CV——day79 读论文:基于小目标检测的扩展特征金字塔网络
  • 智能家居项目(五)测试串口功能
  • 2023年全国最新道路运输从业人员精选真题及答案7
  • python的所有知识点(含讲解),不看就亏死了