如何解决mysql死锁问题

  • 为什么会产生死锁

    • Innodb 引擎为了解决「可重复读」隔离级别下的幻读问题,就引出了 next-key 锁。它是记录锁和间隙锁的组合。

      • Record Lock,记录锁,锁的是记录本身;

      • Gap Lock,间隙锁,锁的就是两个值之间的空隙,以防止其他事务在这个空隙间插入新的数据,从而避免幻读现象。

    • 插入意向锁与间隙锁是冲突的,所以当其它事务持有该间隙的间隙锁时,需要等待其它事务释放间隙锁之后,才能获取到插入意向锁。而间隙锁与间隙锁之间是兼容的,所以所以两个事务中 select ... for update 语句并不会相互影响。

    • 为什么间隙锁与间隙锁之间是兼容的?

      • 间隙锁的意义只在于阻止区间被插入,因此是可以共存的。一个事务获取的间隙锁不会阻止另一个事务获取同一个间隙范围的间隙锁,共享和排他的间隙锁是没有区别的,他们相互不冲突,且功能相同,即两个事务可以同时持有包含共同间隙的间隙锁。

      • 共同间隙包括两种场景:

        • 其一是两个间隙锁的间隙区间完全一样;

        • 其二是一个间隙锁包含的间隙区间是另一个间隙锁包含间隙区间的子集。

      • 有一点要注意,next-key lock 是包含间隙锁+记录锁的,如果一个事务获取了 X 型的 next-key lock,那么另外一个事务在获取相同范围的 X 型的 next-key lock 时,是会被阻塞的。

    • 插入意向锁是什么?

      • 插入意向锁是一种特殊的间隙锁,但不同于间隙锁的是,该锁只用于并发插入操作。

      • 如果说间隙锁锁住的是一个区间,那么「插入意向锁」锁住的就是一个点。因而从这个角度来说,插入意向锁确实是一种特殊的间隙锁。

      • 插入意向锁与间隙锁的另一个非常重要的差别是:尽管「插入意向锁」也属于间隙锁,但两个事务却不能在同一时间内,一个拥有间隙锁,另一个拥有该间隙区间内的插入意向锁(当然,插入意向锁如果不在间隙锁区间内则是可以的)。

      • 插入意向锁的生成时机:

        • 每插入一条新记录,都需要看一下待插入记录的下一条记录上是否已经被加了间隙锁,如果已加间隙锁,此时会生成一个插入意向锁,然后锁的状态设置为等待状态(PS:MySQL 加锁时,是先生成锁结构,然后设置锁的状态,如果锁状态是等待状态,并不是意味着事务成功获取到了锁,只有当锁状态为正常状态时,才代表事务成功获取到了锁),现象就是 Insert 语句会被阻塞

  • insert语句是怎么加行级锁的?

    • Insert 语句在正常执行时是不会生成锁结构的,它是靠聚簇索引记录自带的 trx_id 隐藏列来作为隐式锁来保护记录的。

    • 什么是隐式锁?

      • 当事务需要加锁的时,如果这个锁不可能发生冲突,InnoDB会跳过加锁环节,这种机制称为隐式锁。

      • 隐式锁是 InnoDB 实现的一种延迟加锁机制,其特点是只有在可能发生冲突时才加锁,从而减少了锁的数量,提高了系统整体性能。

  • 如何避免死锁

    • 死锁的四个必要条件:互斥、占有且等待、不可强占用、循环等待。只要系统发生死锁,这些条件必然成立,但是只要破坏任意一个条件就死锁就不会成立。

    • 在数据库层面,有两种策略通过「打破循环等待条件」来解除死锁状态:

      • 设置事务等待锁的超时时间。当一个事务的等待时间超过该值后,就对这个事务进行回滚,于是锁就释放了,另一个事务就可以继续执行了。在 InnoDB 中,参数 innodb_lock_wait_timeout 是用来设置超时时间的,默认值时 50 秒。

      • 开启主动死锁检测。主动死锁检测在发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以继续执行。将参数 innodb_deadlock_detect 设置为 on,表示开启这个逻辑,默认就开启。

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

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

相关文章

Vue笔记 2

数据代理 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写) let obj{x:100} let obj2{y:200} Object.defineProperty(obj2,x,{get(){return obj.x},set(value){obj.x value} })Vue中的数据代理 Vue中的数据代理: 通…

【算法】环形链表 - 遍历/双指针

题目 给定一个链表,判断链表中是否有环,并返回结果。 原理 遍历 声明一个Set,遍历链表放入Set,如果放入失败,说明有环。 双指针 声明一个快指针和一个慢指针,快指针每次移动两步,慢指针移…

MySQL学习笔记(三)

1、insert插入多条数据 语法:insert into t_user(字段名1,字段名2...) values(值1,值2...),(值1,值2...),(值1,值2...)...; 2、快速创建表 原理:将一个查询结果当做一张表创建,可以完成表的快速复制。表创建出来,同时表中的数据…

【计算机毕业设计】——农产品销售系统——后附源码

🎉**欢迎来到我的技术世界!**🎉 📘 博主小档案: 一名来自世界500强的资深程序媛,毕业于国内知名985高校。 🔧 技术专长: 在深度学习任务中展现出卓越的能力,包括但不限于…

✔ ★Java项目——设计一个消息队列(二)

Java项目——设计一个消息队列 四. 项⽬创建五. 创建核⼼类创建 Exchange(名字、类型、持久化)创建 MSGQueue(名字、持久化、独占标识)创建 Binding(交换机名字、队列名字、bindingKey用于与routingKey匹配&#xff09…

LLMs之ToolAlpaca:ToolAlpaca(通用工具学习框架/工具使用语料库)的简介、安装和使用方法、案例应用之详细攻略

LLMs之ToolAlpaca:ToolAlpaca(通用工具学习框架/工具使用语料库)的简介、安装和使用方法、案例应用之详细攻略 目录 ToolAlpaca的简介 0、《ToolAlpaca: Generalized Tool Learning for Language Models with 3000 Simulated Cases》翻译与解读 1、数据集列表 2…

前端代码规范 - 图片相关

本文是前端代码规范系列文章,将涵盖前端领域各方面规范整理,其他完整文章可前往主页查阅~ 在前端项目中,图片资源是构成网站视觉效果的重要元素。合理的图片使用规范不仅可以提高页面加载速度,还可以增强用户体验。本文将详细介绍…

基于arcgis /envi PCA(主成分分析)实现过程

基于arcgis /envi PCA(主成分分析)实现过程 1 提取研究范围 2对研究范围进行重采样 (根据数据情况进行选做,如数据较大建议进行该步骤操作) 3 对研究范围内数据进行归一化处理 4 将空值替换为0 5 对同期不同要素数据进行波段合成 对波段…

易备数据备份软件案例:昆山某电子元器件制造企业灾备方案

昆山某电子有限公司专注于生产和销售高品质的电子元器件,包括各种电容器、电感线圈、电阻器、二极管、晶体管等。产品广泛应用于各种电子设备和行业,包括:消费电子、通信设备、工业控制、汽车电子、航空航天、医疗器械等。 随着公司生产经营…

Yii2 路由美化访问需要加s

不得不说yii真是反人类,怪不得现在都不维护了,今天解析下路由美化下的路由访问问题。 设置main.php配置文件 urlManager > [enablePrettyUrl > true, // 启用 URL美化showScriptName > false, // 隐藏入口文件index.phpenableStrictParsing…

MySql数据库从0-1学习-第三天多表设计学习

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多对一)多对多一对一 一对多 需求:根据需求,完成部门和员工表的设计 一对多,很多人会使用外键,…

如何分析 Java 开源项目源码?

准备深入分析一个 Java 开源项目的源码时,可以通过下面这些步骤和技巧,更系统地理解和分析项目源代码: 1. 确定分析目标和范围: 在开始分析之前,明确你的目标,确定你要深入了解的功能或模块。这有助于你有…

零基础转行网络安全,高薪梦想可以实现吗?

零基础转行网络安全,学会网络安全相关知识,可以从事以下岗位: 1、安全运维: 负责服务器及终端设备的维护 负责业务的安全风险评估和漏洞挖掘 负责安全事件的检查和实施 2、渗透测试 负责渗透测试、风险评估工作的实施 提供…

《web应用技术》第三次课后练习

实验目的: 1、springboot入门程序撰写并启动 2、使用postman练习参数的获取。 参考:Day04-10. Web入门-SpringBootWeb-快速入门_哔哩哔哩_bilibili

【星期计算】蓝桥杯

–> 因为这里是结果填空题,我们直接暴力用java自带的BigInteger类。 /*** 试题 A: 星期计算** 本题总分:5 分* 【问题描述】* 已知今天是星期六,请问20的22次方天后是星期几?* 注意用数字 1 到 7 表示星期一到星期日。* * 【答…

2024年在阿里云申请SSL证书多少钱?免费版不要钱,付费版352元/年

SSL证书是实现网站https访问必须购买的云安全类产品,以阿里云为代表的各大云服务商也都提供申请SSL证书服务,2024年阿里云既提供免费版的SSL证书,也有付费版的,最低只要352元/年。 一、阿里云申请免费版SSL证书申请流程&#xff…

中国平安金融壹账通交付管理中心总经理崔羽先生受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 中国平安金融壹账通交付管理中心总经理崔羽先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“项目管理成与败,人才是第一要素”。大会将于5月25-26日在北京举办,敬请关注! 议题简要…

任推邦七款热门拉新项目,普通人逆袭路径,月入6个W!

任推邦 不扣量的项目拉新平台 1UC网盘 —网推 价格上涨行业置顶 ,大厂项目 市场空白,预算充足,不限量 适合自媒体/抖快等渠道 上传下载不限速 2迅雷网盘—网推 官方核心服务商,大厂项目 群组内测(新增转播收…

【生产实习-毕设】pyspark学生成绩分析与预测(上)

注意:数据由实习单位老师提供(需要自行搜索下载),页面美化为下载模板。 项目介绍:前端页面输入影响成绩的属性,预测出成绩,并作可视化展示——属性对成绩的影响。使用python pyspark 进行数据预…

【Linux 学习】进程优先级和命令行参数!

1. 什么是优先级? 指定进程获取某种资源(CPU)的先后顺序; Linux 中优先级数字越小,优先级越高; 1.1 优先级和权限的区别? 权限 : 能不能做 优先级: 已经能了,但是获…