sql死锁分析

一、重要参数
获取事务信息:SELECT * FROM information_schema.INNODB_TRX;
获取锁等待:SELECT * FROM information_schema.INNODB_LOCK_WAITS;
查看锁信息:SELECT * FROM information_schema.INNODB_LOCKS WHERE lock_trx_id IN ()
二、case1:间隙锁和x锁互斥导致死锁
1、背景:
现将员工从一个组别中移除,同时将员工加入到另一个组别中,如果出现并发情况,就会出现交叉情况,导致死锁
2、死锁原因分析
在这里插入图片描述
在这里插入图片描述
3、解决办法:
1、由于一次操作只会是一个人,所以把员工的in查询改为==查询,事务a和事物b只会有一个拿到uid的锁,解决并发问题
2、将两个操作拆分,分成两个小事物,分别进行提交
三、case2 两条插入语句发生死锁(on duplicate key update)
1、背景:
首先insert on duplicate key 这条sql的语义是:如果insert中的对应键值在数据库中没有找到对应的唯一索引记录,即进行插入;如果对表中唯一索引记录冲突,便进行更新,能够很轻松的达到一种效果: 有则直接更新,无则插入。 首先,在RR的事务隔离级别下,insert on duplicate key这个sql与普通insert只插入意向锁和记录锁不同,insert on duplicate key sql如果没有找到对应的会在唯一键上插入gap lock和插入意向锁(如果有对应记录则会获取next key lock,next key lock 比gap lock多了一个边缘的记录锁)。
注意:向同一个普通索引插入数据,两个线程出现了并发,产生了互相依赖
2、死锁原因分析
在这里插入图片描述
在这里插入图片描述
本质原因:
1、INSERT … ON DUPLICATE KEY UPDATE时,会给每行加一个间隙锁和插入意向锁
2、当持有间隙锁时候,再次申请意向插入锁时,获取不到锁

3、解决办法:
1、改为使用普通的insert插入,当出现重复时,手动捕获异常进行更新逻辑

四、两个普通批量插入导致死锁
一、背景
批量添加黑猫数据抓取执行结果保存,但是两个事物保存的顺序存在交叉情况,交叉内容完全一致,出现abba情况
二、死锁原因分析
在这里插入图片描述
在这里插入图片描述
3、解决方案
1、减少批量保存任务,如果需要批量保存,需要保证保存内容的顺序一致性
2、调整索引或者业务逻辑

五、两个update操作导致死锁(常见)
1、事务a更新id=1记录,事务b更新id=2记录,事务a更新id=2记录事务b更新id=1记录,立刻发生死锁,同样是abba场景
2、死锁分析
– 事务A
BEGIN;
UPDATE my_table SET value=‘A’ WHERE id=1;
– 事务B(在事务A未提交前执行)
BEGIN;
UPDATE my_table SET value=‘B’ WHERE id=2;
– 事务A(继续尝试执行)
UPDATE my_table SET value=‘A1’ WHERE id=2; – 被阻塞
– 事务B(继续尝试执行)
UPDATE my_table SET value=‘B1’ WHERE id=1; – 死锁
3、如何解决
可以采用顺序锁机制、短事务、合适的隔离级别、优化SQL查询、应用层保障顺序执行等策略

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

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

相关文章

大厂AI团战高考作文,华师一附中特级教师这样打分

在人工智能的浪潮中, 人们不禁疑问: AI真的能超越人类吗? 这究竟是现实还是幻想? 我们将目睹一场前所未有的较量: 百度文心一言、阿里通义千问、 腾讯混元、字节豆包 四家国内顶尖互联网企业 精心打造的AI大模…

HBM简介

1、什么是HBM HBMHigh Bandwidth Memory 是一种用于某些 GPU的 3D 堆叠 DRAM存储器 (动态随机存取存储器)以及服务器、高性能计算 (HPC) 、网络连接的内存接口。其实就是将很多个DDR芯片堆叠在一起后和GPU封装在一起,实…

ROS socketcan_bridge使用说明

ROS socketcan_bridge使用说明(以ubuntu20.04为例) socketcan_bridge是什么 ROS针对socketcan提供了三个层次的驱动库,分别是ros_canopen,socketcan_bridge和socketcan_interface。 socketcan_interface: 功能&#x…

政安晨【零基础玩转各类开源AI项目】:解析开源项目:Champ 利用三维参数指导制作可控且一致的人体图像动画

目录 论文题目 Champ: 利用三维参数指导制作可控且一致的人体图像动画 安装 创建 conda 环境: 使用 pip 安装软件包 推理 1. 下载预训练模型 2. 准备准备引导动作数据 运行推理 训练模型 准备数据集 运行训练脚本 数据集 政安晨的个人主页:…

工业无线通信解决方案,企业在进行智能化升级改造

某大型制造企业在进行智能化升级改造,需要将分布在各个车间的数控机床、自动化生产线、AGV小车等设备连接到云端,实现设备的远程监控、数据采集分析等功能。之前工厂内部是用工业以太网连接,存在布线难、成本高、灵活性差等问题。 在了解客户需求后,我司星创易联的工程师建议客…

淘宝扭蛋机小程序,扭蛋市场创新模式

扭蛋机作为潮玩市场的娱乐消费方式,成为了当下消费者的新宠。扭蛋机凭借自身性价比高、商品多样、惊喜性等特点,吸引了各个年龄层的消费者,不仅年轻人喜欢,不少小学生和老年人也非常喜欢,扭蛋机市场迎来了快速发展期。…

简单聊下办公白环境

在当今信息化时代,办公环境对于工作效率和员工满意度有着至关重要的影响。而白名单作为一种网络安全策略,其是否适合办公环境,成为了许多企业和组织需要思考的问题。本文将从白名单的定义、特点及其在办公环境中的应用等方面,探讨…

NRP-Z81探头NRP-Z85功率传感器NRP-Z86罗德与施瓦茨

精确和简单的功率测量重要的特点是高测量精度和速度。紧凑、坚固的R&SNRX基本单元,带彩色触摸显示屏,支持多达四个R&SNRP功率传感器和所有传感器相关测量功能。测量值以数字或图形方式显示,具体取决于测量功能。高分辨率图形用户界面…

【必会面试题】JVM内存分区?垃圾回收(GC)算法?如何处理OOM?

目录 JVM分区模型GC(垃圾回收)算法:处理OOM(Out Of Memory): JVM分区模型 JVM(Java虚拟机)内存划分为多个区域,以支持其运行时环境和对象的生命周期管理。以下是主要的内…

变压器绕线完成之后要做的事

1 调整感量:测主绕组电感量,通过磨气隙或垫气隙,测得感量没错以后,用胶带封装磁芯 2 测验同名端是否正确:两绕组首尾相连,测试连接后的总感量,是否比感量大的那个绕组还大。如果是,…

澳大利亚和德国媒体投放-国外新闻发稿-海外软文推广

德国媒体 Firmenpresse德国新闻 Firmenpresse德国新闻是一家备受欢迎的新闻发布平台,其好友搜索引擎在收录网站方面表现出色。如果您希望更好地将您的新闻传播给德国受众,Firmenpresse德国新闻将是一个理想的选择。 Frankfurt Stadtanzeiger法兰克福城…

电气灭火产品调查:全氟己酮自自动灭火贴多少钱一个?

根据国家消防救援局于透露,今年年初,河南南阳、江西新余、江苏南京接连发生重大火灾事故,截至日前,全国共接报火灾45万起,住宅、宾馆餐饮店、电动车火灾数量相比去年同期均有所上升。从引 发火灾的原因来看&#xff0c…

MySQL Doublewrite Buffer 有了解过吗?

引言:在数据库管理中,确保数据的完整性和一致性是至关重要的。然而,在持久化数据到磁盘的过程中,可能会遇到各种意外情况,如断电或系统崩溃,从而导致部分数据写入,而另一部分数据未能成功写入&a…

揭秘!如何从精益生产转向智能制造

企业在“工业4.0、智能制造、互联网”等概念满天飞的环境下迷失了方向,不知该如何下手,盲目跟风。 君不见,很多企业在“工业4.0、智能制造、互联网”等概念满天飞的环境下迷失了方向,不知该如何下手,盲目跟风&#xf…

2024下《系统集成项目管理工程师》50个高频考点汇总!值得收藏

宝子们!5月软考考完了,终于可以考系统集成了! 整理了50个高频考点,涵盖全书90%考点,先把这个存下!再慢慢看书,边看书边背这个 1、信息安全的基本要素有: (1&#xff09…

迈入智能新纪元:智慧机房运维系统引领行业变革

在数字化飞速发展的今天,机房作为信息时代的“心脏”,其稳定运行对于企业的业务连续性至关重要。然而,传统的机房运维模式面临着诸多挑战,如响应速度慢、故障定位难、资源浪费大等问题。智慧机房运维系统,它将以智能化…

重磅:吴恩达最新的机器学习书籍《Machine Learning Yearning》两年磨一剑

《Machine Learning Yearning》是吴恩达历时两年打磨而成的机器学习和深度学习实践宝典。这本书旨在为读者提供实战经验,以帮助他们在机器学习项目中取得成功。 吴恩达通过自身多年的实践经验,为读者提供了宝贵的指导,涵盖了从项目构建到调试…

ts类型声明文件、内置声明文件

1. ts类型声明文件 在ts中以d.ts为后缀的文件就是类型声明文件,主要作用是为js模块提供类型信息支持,从而获得类型提示 1.1 第三方包用ts编写的,会自动生成一个 .d.ts文件,进行类型声明 1.2 有些包不是用ts编写的,在…

LangChain真的好用吗?谈一下LangChain封装FAISS的一些坑

前言 最近在做一个知识库问答项目,就是现在大模型浪潮下比较火的 RAG 应用。LangChain 可以说是 RAG 最受欢迎的工具,因此我首选 LangChain 来快速构建我的应用。坦白来讲 LangChain 本身一套对于组件的定义已经让我感觉很复杂,为什么采用 f…

Java Web学习笔记6——盒子模型

视频标签&#xff1a;<video> src: 规定视频的URL controls&#xff1a;显示播放控件 width&#xff1a;播放器的宽度 height&#xff1a;播放器的高度 音频标签&#xff1a;<audio> src: 规定音频的URL controls: 显示播放控件 段落标签&#xff1a;<p&g…