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,一经查实,立即删除!

相关文章

安全高效海外仓系统:中小海外仓标准化管理的第一步

在当今全球化的商业背景中,可以说海外仓已经成为跨境电商供应链中不可或缺的一环。 尤其是对于那些处于成长阶段的中小型海外仓来说,选择一款安全高效并且符合其海外仓规模特点的wms管理系统尤其重要。 今天我们就来系统的了解一下,安全高效…

大厂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…

k-means聚类模型的原理和应用

k-means聚类算法是一种迭代求解的聚类分析算法,其步骤是,预将数据分为K组,然后随机选取K个对象作为初始的聚类中心;计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心;聚类中…

用FFMPEG对YUV序列进行编辑的笔记

还是单独开一个吧 每次找挺烦的 播放YUV序列 ffmpeg -f rawvideo -pix_fmt yuv420p -s 3840x2160 -i "Wood.yuv" -vf "scale1280x720" -c:v rawvideo -pix_fmt yuv420p -f sdl "Wood"4K序列转720P ffmpeg -f rawvideo -pix_fmt yuv420p -s 38…

Photoshop 2024无故卡死

来源 还没怎么用呢,就直接卡死不能动了 虽然是学习版 但是想必不会是软件的问题,毕竟Adobe出品的软件应该是还是有点质量的。 解决 安装国际软件的必备技能,目录必须是全英文√保证磁盘空间还有相当部分的剩余√保证电脑性能完全没问题√保…

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

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

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

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

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

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

简单聊下办公白环境

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

DSP问题:TMS320F280049 GPIO输入上拉电压只有2.1V

1、问题现象 使用TMS320F280049编写GPIO输入检测程序时,配置GPIO为输入上拉,使用万用表测量GPIO口只有2.1V左右,程序此时检测到的是低电平,导致无法检测到按钮按下(按钮按下接地)。 2、问题原因 TMS320F…

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

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

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

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

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

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

从零手写实现 nginx-09-compress http 文件压缩

前言 大家好,我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的,可以参考我的另一个项目: 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

计算欧几里得距离

任务描述 本关实现一个函数来计算欧几里得距离。 相关知识 K-means 算法的核心思想是,将数据集中的样本聚类为多个簇集,簇内样本距离较近,簇间样本距离较远。由此可见,其最基本的运算是判断样本(如书籍、电影、用户…

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

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

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

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

k8s-mysql主从部署

一.环境信息 mysql版本 :8.0 k8s 版本1.22 使用nfs作为共享存储 二.配置mysql主节点yaml apiVersion: v1 kind: ConfigMap metadata:name: mysql-master-confignamespace: mysqllabels:app: mysql-master-config data:my.cnf: |[client]default-character-setutf8[mysql]d…