66 mysql 的 表自增长锁
前言
mysql 的表锁之 AUTO_INC, 是我们自增长的时候做并发控制的锁
主要是用于 自增长生成新的 id 的时候的控制
在前面的文档中, 我们又看到 mysql 这边自增长的处理的相关的大概脉络
但是 对于一些 并发控制的细节, 我们当时 应该是直接忽略掉了
我们这里就来看一下 mysql 这里的 AUTO_INC 的一个实现
当然 它的实现 有几种方式, 模式选择有 0, 1, 2
模式为 0 的场景下, 主要是 基于乐观锁, 每一个表映射一个 mutex, 来尝试乐观获取锁
模式为 1 的场景下, 对于 INSERT, REPLACE 命令主要是 基于乐观锁, 每一个表映射一个 mutex, 来尝试乐观获取锁, 其他的场景基于 表自增长锁
模式为 2 的场景下, 主要是基于和前面的 表共享锁, 表排他锁 一个级别的 表自增长锁
我们这里核心关注的是 表自增长锁 的相关实现
表自增长锁
获取 LOCK_AUTO_INC 这边的实现 和 获取其他表级别的锁的主流程一致
差异在于 LOCK_AUTO_INC 和其他锁的兼容性, 在之前 表共享锁, 表排他锁 的场景下面, 为了简化问题, 我们是跳过了 LOCK_AUTO_INC, 这里我们来讲 LOCK_AUTO_INC 代入进来看看
从这里可以看到, 如果是我们 LOCK_AUTO_INC 这边和 表意向锁 是兼容的
和 LOCK_AUTO_INC 是不兼容的, 和 表共享锁, 表排他锁 是不兼容的
总结下来意思就是, 如果是 事务1 获取的是 行锁, 那么是不影响 事务2 获取 表自增长锁 的
如果是 事务1 获取的是 表自增长锁, 那么是会阻塞 事务2 获取 表自增长锁 的
如果是 事务1 获取的是 表共享锁, 表排他锁, 那么是会阻塞 事务2 获取 表自增长锁 的
整体的这边获取 表自增长锁 这边的具体的 锁表策略 分派方式如下
基本上三种策略就是 mutex乐观锁 + mutex乐观锁, 表自增长锁 + 表自增长锁
表自增长锁的获取和释放
表自增长锁 的获取是在执行 insert sql 的时候
然后释放 表自增长锁 是在语句执行完成之后释放的 如下
表自增长锁阻塞的 N 中方式
表自增长锁 的阻塞方式 就是上面提及的 表共享锁, 表排他锁, 表自增长锁 被持有的情况下
假设我们这里尝试模拟 各种阻塞的方式, 事务1先进行执行, 然后事务2尝试获取表排他锁, 产生阻塞
事务2 这边执行固定的 sql 语句如下
begin;
INSERT INTO `test_02`.`tz_test_02`(`field1`, `field2`) VALUES ('field1', '11');
commit;
事务1获取 表排他锁 导致 事务2获取MDL元数据锁 阻塞
begin;
lock tables tz_test_02 write;
-- sleep 10min
unlock tables;
commit;
事务1获取 表共享锁 导致 事务2获取MDL元数据锁 阻塞
begin;
lock tables tz_test_02 read;
-- sleep 10min
unlock tables;
commit;
事务1 获取了 表自增长锁, 导致事务2获取MDL元数据锁 阻塞
完
相关文章:
66 mysql 的 表自增长锁
前言 mysql 的表锁之 AUTO_INC, 是我们自增长的时候做并发控制的锁 主要是用于 自增长生成新的 id 的时候的控制 在前面的文档中, 我们又看到 mysql 这边自增长的处理的相关的大概脉络 但是 对于一些 并发控制的细节, 我们当时 应该是直接忽略掉了 我们这里就来看一下…...
java中的this关键字
🎉🎉🎉欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!!🙏🙏🙏 文章目录…...
资源控制器--laravel进阶篇
laravel的控制器当中有个资源控制器,这个比较好用。 创建资源控制器 php artisan make:controller PhotoController --resource 创建个路由来使用该资源控制器 use App\Http\Controllers\PhotoController; Route::resource(photos, PhotoController::class); 隐式模型绑定不…...
智能工厂的设计软件 为了监管控一体化的全能Supervisor 的监督学习 之 序7 进化论及科学的信息技术创新:分布式账本/区块链/智能合约
Q&A Q46、 聊聊“分布式账本”“区块链”和“智能合约” “分布式账本”、“区块链”和“智能合约”是现代信息技术领域的几个重要概念,它们在金融、供应链管理、物联网等多个领域都发挥着重要作用。以下是对这三个概念的详细解析: 分布式账本 …...
从零开始认识显卡
显卡(GPU,全称为Graphics Processing Unit),是电脑中专门负责图形处理的硬件组件。以下是从零开始认识显卡的简单介绍: 1. 显卡的基本组成 显卡通常由以下几个主要部分组成: GPU核心:显卡的“…...
什么是计算机网络
什么是计算机网络? 计算机网络的定义计算机网络的分类按覆盖范围分类按拓扑结构分类按通信传输介质分类按信号频带占用方式分类 计算机网络的功能信息交换资源共享分布式处理 计算机网络的组成计算机网络的定义计算机网络的分类按覆盖范围分类按拓扑结构分类按通信传…...
网络安全在线网站/靶场:全面探索与实践
目录 1. CyberPatriot 简介 功能与特点 适用人群 2. Hack The Box 简介 功能与特点 适用人群 3. OverTheWire 简介 功能与特点 适用人群 4. VulnHub 简介 功能与特点 适用人群 5. PortSwigger Web Security Academy 简介 功能与特点 适用人群 6. TryHackM…...
多旋翼无人机长航时远距离集群技术详解
多旋翼无人机长航时远距离集群技术是当前无人机技术发展的重要方向之一,它结合了多旋翼无人机的灵活性和集群技术的优势,实现了无人机在长时间、远距离条件下的高效协同作业。以下是对该技术的详细解析: 一、多旋翼无人机特点 多旋翼无人机以…...
C#编写的日志记录组件 - 开源研究系列文章
以前编写过一个日志记录组件的博文,这次发布一个修改过的完善版本。 1、 项目目录; 2、 源码介绍; 1) 实现; 2) 使用; 后面的参数为级别设置,只有大于这个级别的才进行日志记录,限制了日志记录的…...
使用 Java 操作 SQLite 数据库
文章目录 1.导入依赖2.实际应用 1.导入依赖 <dependencies><dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId><version>3.36.0.3</version></dependency> </dependencies>2.实际应…...
再次讨论下孤注一掷
在孤注一掷中的黑客技术里面,简单介绍了电影孤注一掷中用的一些"黑科技",这里继续讨论下,抛弃这些黑科技,即使在绝对公平的情况下,你也一样赢不了赌场 相对论有一个假设就是光速不变,这里也有个…...
系统思考—跳出症状看全局
感谢合作伙伴的邀请,圆满结束国药试剂关于《系统思考》的课程。课堂上,我们围绕“缺货”这个看似具体的问题,展开了一场跨部门的深度探讨。销售、采购、物流等部门各抒己见,发现每个部门的出发点都是为了公司好,但误判…...
前端面试vue篇:Vue2 和 Vue3 在设计和性能上有显著区别
Vue3 相对于 Vue2 的主要改进和性能提升体现在以下几个关键领域 1.响应式系统: (1)Vue2 使用 Object.defineProperty 遍历对象的所有属性来实现响应式,这在大型应用中可能导致性能瓶颈,尤其是在组件初次渲染和大量数据变化时。 (2)Vue3 引入了…...
每天五分钟深度学习:神经网络模型的直观理解
本文重点 神经网络是深度学习的基础模型之一,本文将讲解一下基础模型神经网络是什么? 神经网络 如上所示,这个神经网络有两层(我们认为输入层不算神经网络的层数),其中一个隐藏层,还有一个是输出层。我们称隐藏层为第一层,输出层为第二层,输入层为第零层。 我们有输…...
高集成的MCU方案已成电机应用趋势?
【哔哥哔特导读】高集成化的芯片成为当下MCU领域研发和市场布局的重点,但是在实际应用中仍然面临散热等痛点问题,MCU厂商是如何解决和优化这些痛点? 随着全球工业自动化、智能制造和绿色发展的不断推进,中国电机行业正站在新一轮…...
商用密码产品认证名录说明
《商用密码产品认证目录》是为贯彻落实《中华人民共和国密码法》,进一步健全完善商用密码产品认证体系,更好满足商用密码产业发展需要,根据《国家密码管理局 市场监管总局关于调整商用密码产品管理方式的公告》《市场监管总局 国家密码管理局…...
无人机技术探索:电机、电调与桨叶的运行原理!
无人机电机的主要材料 铝合金:铝合金是当前应用最广泛的无人机电机材料之一,具有制造成本低廉、重量轻、支撑力强等特点,同时有一定的抗氧化性能。然而,铝合金电机的耐久性较差,若长期在高温高湿的环境下使用易产生氧…...
实现 UniApp 右上角按钮“扫一扫”功能实战教学
实现 UniApp 右上角按钮“扫一扫”功能实战教学 需求 点击右上角扫一扫按钮(onNavigationBarButtonTap监听),打开扫一扫页面(uni.scanCode) 扫描后,以网页的形式打开扫描内容(web-view组件),限制只能浏览带有执行域名的网站,例如…...
FP16的表示范围【详解计算步骤】
符号位:1bit 指数位:5bit 尾数位:10bit 指数位 指数位的值:00000 - 11111 00000和11111被给予特殊含义: 00000 表示 011111 表示Nan或无穷大所以,指数位的范围为00001-11110 如果指数位的值为00001,则实际指数=指数位的值-偏移=00001 - 15 = -14 如果指数位的值为1111…...
MySQL UPDATE语句执行链路解析
文章目录 引言1. 总览:UPDATE语句的执行链路2. 客户端发起请求2.1 SQL请求的形成2.2 MySQL通信协议 3. 连接器模块3.1 连接管3.2 会话上下文 4. SQL解析器4.1 语法解析4.2 语法错误处理 5. 查询优化器5.1 查询优化的核心概念5.2 优化器生成执行计划的步骤5.3 优化器…...
大语言模型通用能力排行榜(2024年11月8日更新)
数据来源SuperCLUE 榜单数据为通用能力排行榜 排名 模型名称 机构 总分 理科 文科 Hard 使用方式 发布日期 - o1-preview OpenAI 75.85 86.07 76.6 64.89 API 2024年11月8日 - Claude 3.5 Sonnet(20241022) Anthropic 70.88 82.4…...
java远程服务器调试
1远程debug -agentlib:jdwptransportdt_socket,servery,suspendn,address服务器ip:port 2.jmx JAVA_OPT“${JAVA_OPT} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.portport -Dcom.sun.management.jmxremote.local.onlyfalse -Dcom.sun.management.jmxr…...
如何使用 Vivado 从源码构建 Infinite-ISP FPGA 项目
如约介绍源码构建 Infinite-ISP 项目,其实大家等的是源码,所以中间过程简洁略过,可以直接翻到文末获取链接。 开源ISP(Infinite-ISP)介绍 构建工程 第一步,从文末或者下面链接获取源码 https://github.com/…...
全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS系统定制开发
8、RTOS系统定制开发 此处以在rtos/components/aw目录下创建一个简单的软件包为例,帮助客户了解RTOS环境,为RTOS系统定制开发提供基础。 RTOS环境下的软件包主要由三部分组成,源文件,Makefile,Kconfig,如下…...
A045-基于spring boot的个人博客系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...
SpringBoot集成ES(ElasticSearch)
1.导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>导入依赖后,注意在依赖中查看对应的版本是否与本机ES对应 2.创建配置并…...
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
文章目录 应用快速部署NginxRedisMySQLTomcat 制作镜像镜像原理基于已有容器创建使用 Dockerfile 创建镜像指令说明构建应用创建 Dockerfile 文件创建镜像 应用快速部署 Nginx docker run -d -p 80:80 nginx使用浏览器访问虚拟机地址 Redis docker pull redis docker run --…...
实验四:构建园区网(OSPF 动态路由)
目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验步骤 1、在 eNSP 中部署网络 2、设计全网 IP 地址 3、配置二层交换机 4、配置路由交换机并测试通信 5、配置路由接口地址 6、配置 OSPF 动态路由,实现全网互通 一、实验简介 使用路由…...
【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-31
文件下载与邀请翻译者 学习英特尔开发手册,最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册,会是一件耗时费力的工作。如果有愿意和我一起来做这件事的,那么ÿ…...
debian 如何进入root
debian root默认密码, 在Debian系统中,安装完成后,默认情况下root账户是没有密码的。 你可以通过以下步骤来设置或更改root密码: 1.打开终端。 2.输入 sudo passwd root 命令。 3.当提示输入新的root密码时,输入你想要的密码…...
极坐标气泡图:医学数据分析的可视化新视角
在医学研究中,数据的可视化是至关重要的。它不仅能帮助我们更直观地理解数据,还能揭示数据中隐藏的模式和趋势。今天,我们要介绍一种独特的数据可视化工具——极坐标气泡图,以及它在医学中的重要作用。 什么是极坐标气泡图&#…...
【随手笔记】电脑端上位机初涉(一)
实现电脑端上位机的方式及其学习难度和知识点 在嵌入式开发中,电脑端上位机程序用于与嵌入式设备进行通信和控制。以下是几种常见的实现方式,以及它们的学习难度和所需的知识点: Python PySerial 学习难度:低知识点:…...
对抗样本存在的原因
对抗样本存在的原因与深度学习模型的结构和训练机制密切相关,主要包括以下几个方面: 1. 模型的高维性和线性化行为 高维性:深度学习模型通常在高维空间中运行,而高维空间中的数据分布非常稀疏。微小的扰动在高维空间可能被放大&a…...
Python编程整理汇总(基础汇总版)
1. 基础语法 1.1 变量与数据类型 整数:a 10 浮点数:b 3.14 字符串:c "Hello, World!" 布尔值:d True 列表:e [1, 2, 3, 4, 5] 元组:f (1, 2, 3) 字典:g {"name&qu…...
24软专 数据结构
1、A[n],k,将数组向右循环移动k位。要求时间复杂度O(n),空间O(1)。 思路:采用三次反转数组的操作,可以实现时间复杂度为O(n),空间复杂度为O(1)的算法。 void moveElem(int array[],int k,int length){//a…...
如何更改手机GPS定位
你是否曾想过更改手机GPS位置以保护隐私、玩游戏或访问受地理限制的内容?接下来我将向你展示如何使用 MagFone Location Changer 更改手机GPS 位置!无论是在玩Pokmon GO游戏、发布社媒贴子,这种方法都快速、简单且有效。 第一步:下…...
java Queue 详解
Java Queue 详解 Queue 是 Java 集合框架中用于实现 队列 数据结构的接口,位于 java.util 包中。队列是一种 先进先出(FIFO) 的数据结构,元素按照插入的顺序依次出队。 1. Queue 的基本特性 FIFO(First-In-First-Out&…...
贪心算法 -- 递增子序列
目录 最长递增子序列 题解: 代码: 递增的三元子序列 题解: 代码: 简易版: 最长连续递增序列 题解: 代码: 最长递增子序列 300. 最长递增子序列 - 力扣(LeetCode…...
MySQL:表的增删查改
目录 一. Create 1.1 单行数据全列插入 1.2 多行数据全列插入 1.3 插入否则更新 1.3.1 要插入的值与原数据有冲突则更新 1.3.2 要插入的值与原数据没有冲突则正常插入 1.3.3 要插入的值与原数据有冲突但是连续更新了两次 1.4 替换 二. Retrieve 2.…...
Python操作neo4j库py2neo使用之创建和查询(二)
Python操作neo4j库py2neo使用之创建和查询(二) py2neo 创建操作 1、连接数据库 from py2neo import Graph graph Graph("bolt://100.100.20.55:7687", auth(user, pwd), nameneo4j)2、创建Node from py2neo import Node, Subgraph # 创建…...
【pytorch-04】:线性回归案例(手动构建)
文章目录 1 构建数据集2 构建假设函数3 损失函数4 优化方法5 训练函数6.总结 1 构建数据集 为什么构建数据加载器? 在进行训练的时候都是采用的不是全部的数据,而是采用一个batch_size的数据进行训练,每次向模型当中送入batch_size数据&#…...
外包干了3年,技术退步明显...
先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能…...
React Native 全栈开发实战班 -原生功能集成之相机与图片
在移动应用中,相机功能 和 图片选择 是非常常见的需求,用户可以通过相机拍照或从相册中选择图片。React Native 提供了多种方式来实现相机和图片选择功能,包括使用第三方库(如 react-native-image-picker)和调用原生模…...
以太坊交易处理全流程:数据采集、价格查询与问题解决
一、背景 在开发交易记录处理系统时,涉及从以太坊链上获取交易记录、将其存储到数据库、根据交易时间查询历史价格,并计算交易的美元价值。在这一过程中,涉及多个技术环节及工具的综合使用,例如区块链 API 调用、数据库操作、时间戳处理和外部数据接口整合。 本文涉及的内…...
css数据不固定情况下,循环加不同背景颜色
<template><div><p v-for"(item, index) in items" :key"index" :class"getBackgroundClass(index)">{{ item }}</p></div> </template><script> export default {data() {return {items: [学不会1, …...
【Node.js】Node.js 和浏览器之间的差异
Node.js 是一个强大的运行时环境,它在现代 JavaScript 开发中扮演着重要角色。然而,许多开发者在使用 Node.js 时常常会感到困惑,尤其是与浏览器环境的对比。本文将深入探讨 Node.js 和浏览器之间的差异,帮助你全面理解两者的设计…...
算法【最长递增子序列问题与扩展】
本文讲解最长递增子序列以及最长不下降子序列的最优解,以及一些扩展题目。本文中讲述的是最优解,时间复杂度是O(n*logn),空间复杂度O(n),好实现、理解难度不大。这个问题也可以用线段树来求解,时间和空间复杂度和本节讲…...
【论文速读】| RobustKV:通过键值对驱逐防御大语言模型免受越狱攻击
基本信息 原文标题:ROBUSTKV: DEFENDING LARGE LANGUAGE MODELS AGAINST JAILBREAK ATTACKS VIA KV EVICTION 原文作者:Tanqiu Jiang, Zian Wang, Jiacheng Liang, Changjiang Li, Yuhui Wang, Ting Wang 作者单位:Stony Brook University…...
查询Mysql中被锁住的表以及如何解锁
当MySQL中的表被锁住时,可能会导致查询变慢或完全无法访问该表。处理这种情况的方法取决于锁的原因以及你想要达到的目标。以下是一些常见的步骤和技巧,可以帮助你解决被锁住的表的问题: 1. 识别锁的情况 首先,你需要确定哪些表…...
【Mac】未能完成该操作 Unable to locate a Java Runtime
重生之我做完产品经理之后回来学习Data Mining Mac打开weka.jar报错"未能完成该操作 Unable to locate a Java Runtime" 1. 打开终端执行 java -version 指令,原来是没安装 JDK 环境 yyzccnn-mac ~ % java -version The operation couldn’t be comple…...