首页 > 数据库 >[MySQL]一次死锁排查

[MySQL]一次死锁排查

时间:2024-09-09 22:25:34浏览次数:9  
标签:LOCK age 30 排查 死锁 user MySQL id

字节面试题

image
在可重复隔离级别下,这种情况会发生什么?

答案:死锁

下面我们用一个具体的例子来展示:
首先我们有一张这样的表
image
下面我们来执行一些语句,

image

可以看到结果输出了,检测到发生了死锁

Deadlock found when trying to get lock; try restarting transaction

下面具体分析,首先给出执行流程

事务A 事务B
1 begin; begin;
2 update user set age = 30 where id = 25;
3 update user set age = 30 where id = 26;
4 insert into user(id,name,age,email) values(25,"dcf",30,"[email protected]");
5 insert into user(id,name,age,email) values(26,"dcf",30,"[email protected]");

下面分析每个阶段的加锁情况

  1. 阶段2 update user set age = 30 where id = 25;

通过select * from performance_schema.data_locks\G;来查看加锁的情况:

image

可以看到加了两种锁,一种是表锁,意向排他锁,可以看到成功获取了这把锁,

LOCK_TYPE: TABLE
LOCK_MODE: IX
LOCK_STATUS: GRANTED
LOCK_DATA: NULL

另一种是记录锁,排他锁,间隙锁,锁住的范围是(20,30),可以看到成功获取到了这把锁,

LOCK_TYPE: RECORD
LOCK_MODE: X,GAP
LOCK_STATUS: GRANTED
LOCK_DATA: 30
  1. 阶段3 update user set age = 30 where id = 26;

通过select * from performance_schema.data_locks\G;来查看加锁的情况:

image

可以看到加了两种锁,一种是表锁,意向排他锁,可以看到成功获取了这把锁,

LOCK_TYPE: TABLE
LOCK_MODE: IX
LOCK_STATUS: GRANTED
LOCK_DATA: NULL

另一种是记录锁,排他锁,间隙锁,锁住的范围是(20,30),可以看到成功获取到了这把锁,

LOCK_TYPE: RECORD
LOCK_MODE: X,GAP
LOCK_STATUS: GRANTED
LOCK_DATA: 30
  1. 阶段4 insert into user(id,name,age,email) values(25,"dcf",30,"[email protected]");

image

  1. 阶段5 insert into user(id,name,age,email) values(26,"dcf",30,"[email protected]");

image

可以看到第3,4阶段双方都在等待锁,产生了死锁现象,
这个死锁的产生是由于,在阶段1,2双方持有了(20,30)区间的间隙锁,阶段3,4的插入操作会产生插入意向锁,这两个插入意向锁都被对方的间隙锁所阻塞,从而产生了死锁。

插入意向锁介绍
本文使用了间隙锁会阻塞插入意向锁这个特点

标签:LOCK,age,30,排查,死锁,user,MySQL,id
From: https://www.cnblogs.com/DCFV/p/18405413

相关文章

  • 部署K8S集群(四):部署MySQL
    密码文件:MySQLSecret#VGVzdA==->Test#ZGJyZWFkZXI=->root#cGFzc0AxMjM0->pass@1234mkdir-p/opt/mysqlmkdir-p/data/mysqlcat>/opt/mysql/mysql-secret.yaml<<EOFapiVersion:v1kind:Secretmetadata:name:mysql-secrettype:......
  • MySQL——视图(二)视图管理(7)删除视图
            当视图不再需要时,可以将其删除,删除视图时,只能删除视图的定义,不会删除数据。删除一个或多个视图可以使用DROPVIEW语句,删除视图的基本语法格式如下所示:DROPVIEWIIEEXISTS]view_name[,view_name1]...[RESTRICT|CASCADE]        在上述......
  • MySQL——视图(三)应用实例——视图的应用
            本节将通过一个应用案例让读者熟练掌握在实际开发中创建并使用视图的完整过程。1.案例的目的        掌握视图的创建、查询、更新和删除操作。        假如有来自河北和山东的三个理科学生报考北京大学(PekingUniversity)和清华大学(Tsinghua......
  • MySQL的SQL语句
    一、SQL1、概念 SQL:StructureQueryLanguage(结构化查询语言),SQL最早是被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准。后来被国际化标准组织(ISO)采纳为关系型数据库语言的国际标准。​2、分类​1)DDL(DataDefinitionLanguage):数据定义语言,用来定义数据库对象......
  • 网卡丢包排查思路
    查看统计信息:netstat-sethtool-Seth0cat/proc/net/devcat/sys/class/net/eth0/statistics/*cat/proc/net/softnet_stat#查看软件中断(softirq)处理的统计信息下面摘抄来自网上的ifconfig部分字段解释说明:RXerrors:表示总的收包的错误数量,这包括too-long-fram......
  • JSP课程设计|基于Jsp和MySql实现的农场信息管理系统
    3.1基本开发环境配置根据上述要求,结合项目开发实际需要,我们将项目所需基本开发环境清单列出如下所示。操作系统:MicrosoftWindow10编程语言:Java编程IDE:JetBrains-IntellijIdeaUltimate服务器:Apache-Tomcat-9.0.6数据库:MySQL5.7.21CommunityServer由于这些环......
  • 线上问题排查-定时任务状态未复位
    项目业务用户授权登录后,负责把本app的运动同步到第三方,分别对接了A、B、C、D等第三方,各个平台的推送方式不太一样,有一些是主动查询,有一些是主动推送场景周五线上Redis报了内存不足,代码排查后发现用户数据占用了很大一部分,并且只存储不查询也不设置过期事件也没有内存淘汰......
  • MySQL数据库insert,delete,update,select语句
    MySQL数据库insert,delete,update,select语句是在做数据处理是的重要部分首先我们要先拥有一个表格,这里我建立了一个student表然后在这个表格中添加一些数据这里要使用insert的语句INSERTINTOstudent(NO,NAME,age)VALUES(1001,'张三',20);这里我创建到的表有三个属性......
  • Linux上rpm安装MySQL8
    1.下载安装包下载链接https://downloads.mysql.com/archives/community/或者在MySQL官网根据提示一步一步点进去选择合适的版本2.上传至服务器,解压tar-xvfmysql-8.0.33-1.el7.x86_64.rpm-bundle.tar3.安装参考官方文档https://dev.mysql.com/doc/refman/8.0/en......
  • CentOS卸载MySQL
    查看MySQL状态systemctlstatusmysqld2.如果MySQL处于启动状态,则停止MySQLsystemctlstopmysqld3.取消开机自启动systemctldisablemysqld4.查找已安装的MySQL包rpm-qa|grep-imysql#或yumlistinstalled|grep-imysqlmysql-community-client.x86_64......