mysql的一次死锁记录

news2024/9/25 19:25:59

表结构

create table lzy_test.test_lzy
(
    id   int   not null primary key,
    name varchar(128) default '' null,
    age  int          default 0  null,
    constraint key_name  unique (name)
);

表中数据

idnameage
1lzy10
4lzy41233
6lzy60
9lzy90

事务死锁的过程

  1. 隔离级别RC
事务A事务B
begin ;
#update test_lzy set  name='lzyxx' where id=6;

按照下面的方式来理解,(等同于但是稍微有点区别,但是不影响这里的结果)

select * from test_lzy where name='lzy6' for update;

#第一步

#这条记录原值name='lzy6',这里的更新行为 会把name='lzy6'的索引记录标记为删除,并非真的删

# 此时加锁2个
# 锁A1#  索引:id      数据范围(id=6)           有个x-record 锁
# 锁A2#  索引:name    数据范围(name='lzy6')    有个 x-record 锁

insert ignore into test_lzy values (122,'lzy6',88) ;

#第二步

# 由于 name是唯一键,检查到 lzy6 重复(在事务A中已经标记为删除),此时就会额外加一个s-临键锁,锁住范围是(lzy4,lzy6],左开右闭

# 但是由于事务A中有一个 'lzy6'的x-record锁,所以这里(lzy4,lzy6) gap锁是获取到的,但是 'lzy6'的记录所 会被 事务A block

# 所以此时的锁有一个

#锁B1# 索引:name 数据范围(lzy4,lzy6) 类型:S锁

# 锁等待: 事务A的锁A2#

update test_lzy set  name='lzy5' where id=9;
#第三步
# 这个时候 更新相当于 会插入一个新的索引name='lzy5', 就会有一个插入意向锁,这里 会被事务B中的锁B1 block

# 所以此时新增的锁有一个
#锁B2#   索引:name   数据范围(lzy4,lzy6)    类型:插入意向锁-x

# 锁等待: 事务B的锁B1#

#此时锁循环依赖 死锁

查看锁记录

第一步:

先忽略意向锁IX

 

执行第二步

后三行是 事务A的,前两行是事务B的

 第三步

触发死锁了

死锁日志

=====================================
2023-05-04 11:35:04 0x70000b9cb000 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 6 seconds
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 7 srv_active, 0 srv_shutdown, 2917 srv_idle
srv_master_thread log flush and writes: 0
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 0
OS WAIT ARRAY INFO: signal count 0
RW-shared spins 0, rounds 0, OS waits 0
RW-excl spins 0, rounds 0, OS waits 0
RW-sx spins 0, rounds 0, OS waits 0
Spin rounds per wait: 0.00 RW-shared, 0.00 RW-excl, 0.00 RW-sx
------------------------
LATEST DETECTED DEADLOCK
------------------------
2023-05-04 11:34:35 0x70000ad6b000
*** (1) TRANSACTION:
TRANSACTION 2316, ACTIVE 38 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s), undo log entries 1
MySQL thread id 11, OS thread handle 123145496825856, query id 367 localhost 127.0.0.1 root update
/* ApplicationName=DataGrip 2021.1 */ insert ignore into test_lzy values (122,'lzy6',88)

*** (1) HOLDS THE LOCK(S):
RECORD LOCKS space id 3 page no 5 n bits 80 index key_name of table `lzy_test`.`test_lzy` trx id 2316 lock mode S waiting
Record lock, heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
 0: len 4; hex 6c7a7936; asc lzy6;;
 1: len 4; hex 80000006; asc     ;;


*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 3 page no 5 n bits 80 index key_name of table `lzy_test`.`test_lzy` trx id 2316 lock mode S waiting
Record lock, heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
 0: len 4; hex 6c7a7936; asc lzy6;;
 1: len 4; hex 80000006; asc     ;;


*** (2) TRANSACTION:
TRANSACTION 2315, ACTIVE 65 sec updating or deleting
mysql tables in use 1, locked 1
LOCK WAIT 4 lock struct(s), heap size 1136, 4 row lock(s), undo log entries 1
MySQL thread id 9, OS thread handle 123145496219648, query id 394 localhost 127.0.0.1 root updating
/* ApplicationName=DataGrip 2021.1 */ update test_lzy set  name='lzy5' where id=9

*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 3 page no 5 n bits 80 index key_name of table `lzy_test`.`test_lzy` trx id 2315 lock_mode X locks rec but not gap
Record lock, heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
 0: len 4; hex 6c7a7936; asc lzy6;;
 1: len 4; hex 80000006; asc     ;;


*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 3 page no 5 n bits 80 index key_name of table `lzy_test`.`test_lzy` trx id 2315 lock_mode X locks gap before rec insert intention waiting
Record lock, heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
 0: len 4; hex 6c7a7936; asc lzy6;;
 1: len 4; hex 80000006; asc     ;;

*** WE ROLL BACK TRANSACTION (1)
------------
TRANSACTIONS
------------
Trx id counter 2321
Purge done for trx's n:o < 2321 undo n:o < 0 state: running but idle
History list length 2
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 421944850257696, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 421944850256856, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 421944850255176, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 421944850254336, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 421944850253496, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 2315, ACTIVE 94 sec
4 lock struct(s), heap size 1136, 4 row lock(s), undo log entries 1
MySQL thread id 9, OS thread handle 123145496219648, query id 402 localhost 127.0.0.1 root

 

 分析:

日志中的事务1对应于事务B:黄色区域

  1. 获取了一个s临键锁的gap部分:索引是name,值是(lzy4,lzy6)
  2. 等待获取这个s临键锁的rec记录部分 : 

日志中的事务2对应于事务A:紫色区域

  1. 获取了一个x记录锁 (索引name,值是‘lzy6’)
  2. 等待获取这个s临键锁的rec记录部分

结论:

 

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

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

相关文章

【沐风老师】3dMax创建缝线插件StitchLines使用方法详解

3dMax创建缝线插件使用方法详解 3dMax创建缝线插件StitchLines&#xff0c;一键生成车缝线建模&#xff0c;该脚本与可编辑多边形、可编辑样条线或 编辑多边形修改器一起使用&#xff0c;创建一条样条曲线&#xff08;车缝线&#xff09;&#xff0c;它将以几何体形式在视口中和…

云时通OMS:为零售品牌商打造高效的全渠道订单管理!

传统的零售企业围绕“人、货、场” 三要素来展开营销&#xff0c;其目标是基于“场”将货销售给更多的人。随着数字技术的应用&#xff0c;新零售模式下的“场”除了传统的线下店铺外&#xff0c;还拓展了多元化的线上渠道&#xff0c;比如小程序、企业APP、第三方平台、电商直…

学系统集成项目管理工程师(中项)系列17a_范围管理(上)

1. 包括确保项目做且只做所需的全部工作&#xff0c;以成功完成项目的各个过程 2. 项目工作明确划定边界 2.1. 什么是包括在项目之内的 2.2. 什么是不包括在项目之内的 3. 项目其他各方面管理的基础 4. 编制范围管理计划过程 4.1. 对如何定义、确认和控制项目范围的过程进…

归一化处理(2023寒假每日一题 14)

在机器学习中&#xff0c;对数据进行归一化处理是一种常用的技术。 将数据从各种各样分布调整为平均值为 0 0 0、方差为 1 1 1 的标准分布&#xff0c;在很多情况下都可以有效地加速模型的训练。 这里假定需要处理的数据为 n n n 个整数 a 1 , a 2 , ⋯ , a n a_1,a_2,⋯…

零入门kubernetes网络实战-30->基于bridge+veth pair+DNAT技术来实现外网可以访问内网的方案

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 通过DNAT技术可以将brige虚拟网桥管理的内网中的服务暴露出来&#xff0c;以供外网访问。 1、测试环境介绍 两台centos虚拟机 # 查看操作系统版本 cat /…

Typora 文字快捷修改颜色

Typora 设置字体上色快捷键 1. 安装AutoHotKey AutoHotkey 是一种 免费 和 开源 的微软Windows自定义脚本语言&#xff0c;最初旨在 提供简单的键盘快捷键或热键 &#xff0c; 快速创建宏和软件自动化 。 基于成熟的做法&#xff0c;本脚本也采用 AutoHotKey 实现。 AutoHot…

精炼计算机网络——物理层(一)

文章目录 前言2.1物理层的基本概念2.2 数据通信的基础知识2.2.1 数据通信系统的模型2.2.3 信道的极限容量 2.3 物理层下面的传输媒体2.3.1 导引型传输媒体2.3.2 非导引型传输媒体 总结 前言 经历了两篇文章的学习&#xff0c;相信读者们一定对计算机网络有了一个基础的了解。接…

vue3+element-plus 通过v-infinite实现下拉滚动无限加载

v-infinite官网 v-infinite-scroll无限滚动组件使用详解 1、v-infinite-scroll"load" //load无限滚动加载的方法2、infinite-scroll-disabled //是否禁用无限滚动加载3、infinite-scroll-delay //节流时延&#xff0c;单位为ms4、infinite-scroll-distance //触发加载…

深入理解Java Class文件格式 constant_UTF_info

首先&#xff0c; 让我们回顾一下关于class文件格式的之前两篇博客的主要内容。 在 深入理解Java Class文件格式&#xff08;一&#xff09; 中&#xff0c; 讲解了class文件在整个java体系结构中的位置和作用&#xff0c; 讲解了class文件中的魔数和版本号相关的信息&#xff…

GitHub上“千金难求”的Spring Boot趣味实战全彩版手册,太干了

本书内容极其丰富&#xff0c;不仅涵盖了Spring MVC、MyBatis Plus、SpringData JPA、Spring Security、Quartz等主流框架&#xff0c;整合了MySQL、Druid、Redis、RabbitMQ、Elasticsearch等互联网常用技术与中间件&#xff0c;还涉及单元测试、异常处理、日志、Swagger等技术…

Vue——Vue2项目开发流程以及Element组件库的使用

Vue项目开发流程&#xff08;Vue2演示&#xff09; 在使用Vue提供的脚手架创建的项目文件里面&#xff0c;可以看见引入了三个组件 一个是Vue组件&#xff0c;有了这个下面才可以新建一个Vue实例 一个是App组件&#xff0c;下面将其使用一个render函数打包成了一个DOM元素放…

Redis分片集群和亿级访问量数据处理

一、redis分片集群 1.简介 业务场景&#xff0c;需要存储50G的数据。对于内存和硬盘配置不足&#xff0c;选用两种方式 一种&#xff1a;纵向扩展&#xff1a;加内存&#xff0c;加硬盘&#xff0c;提高CPU。简单、直接。RDB存储效率要考虑。成本要考虑。 二种&#xff1a;横…

016+limou+C语言常用的32个关键字

0.前言 本博文是在对C语言有一定深入了解后&#xff0c;对C语言最为主要的32个关键字进行了简要的概述和一些容易被忽略的细节研究&#xff0c;您可以当作学习或复习C语言基础使用&#xff08;毕竟关键字就是构成C语言语法的基石&#xff09;&#xff0c;也可以提出您所不认同…

java版企业电子招投标采购系统源码之首页设计

功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外部…

易岸教育:公务员两科目考试内容是什么?

&#xff08;一&#xff09;《行政能力测验》 《行政能力测验》分为常识判断、言语理解与表达、数量关系、推理判断、资料分析五大部分。 1、常识判断题共20道题&#xff0c;涵盖面广&#xff0c;内容丰富&#xff0c;可归纳为自然科学、社会科学、时事热点三大类。 2、语言…

风扇的气动性能简介

1 风扇的定义 & 分类 风扇是很常见的设备&#xff0c;应用于通风、设备散热等多种场景&#xff0c;典型如家用的电风扇、抽风机&#xff0c;各类电子设备的散热风扇等。 风扇是通过外力驱动叶片旋转引发气体运动的设备。根据AMCA Standard 210-16的规定&#xff0c;风扇对气…

一个滑模控制(SMC)实例及仿真

被控对象 考虑这么一个被控对象 J θ ( t ) u ( t ) d ( t ) J \ddot\theta(t) u(t) d(t) Jθ(t)u(t)d(t) 其中&#xff0c; J J J 为转动惯量&#xff0c; θ \theta θ 为角度&#xff0c; u u u 为控制量&#xff0c; d d d 为扰动&#xff0c;且 d ( t ) < D d(…

联想天逸510S-i5电脑如何重装windows系统

如果你的联想天逸510S-i5电脑出现了系统故障、病毒感染、运行缓慢等问题&#xff0c;你可能需要重装系统来解决。但是&#xff0c;联想天逸510S-i5电脑如何重装windows系统呢?本文将为你介绍两种方法&#xff1a;用U盘重装系统和用联想系统自带的重置功能。 ​ 联想天逸510S…

天气预报查询 API 提供个性化的天气服务的设计思路

引言 假设你是一个开发人员或公司&#xff0c;正在考虑开发一款天气应用程序&#xff0c;但你意识到市场上已经有很多竞争者在使用天气预报查询 API 来提供类似的服务&#xff0c;本文将一起探寻一些创新的方法来提高应用程序的竞争力。 扩大竞争力的一些建议 如果市面上已经…

java企业工程项目管理系统平台源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…