1.死锁的概念

死锁:死锁一般是事务相互等待对方资源,最后形成环路造成的。
对于死锁,数据库处理方法:牺牲一个连接,保证另外一个连接成功执行。
发生死锁会返回ERROR:1213 错误提示,大部分的死锁InnoDB存储引擎本身可以侦测到,不需要人为进行干预。
注意:
InnoDB存储引擎并不会回滚大部分的错误异常,像阻塞章节里面的例子,但是死锁例外,发现死锁后,InnoDB存储引擎会马上回滚一个事务,会返回1213错误。

2.死锁的情形举例:

eg1:

步 骤 事务1 事务2
1 begin; begin;
2 delete from info_area where id=1;
3 update info_users set mobile='18514656666' where mobile='18514656620';
4 update info_users set mobile='18514656666' where mobile='18514656620';
5 delete from info_area where id=1;


分析死锁日志:
第一部分
从日志里我们可以看到事务1当前正在执行update info_users set mobile='18514656666' where mobile='18514656620',该条语句正在申请表info_users的索引IDX_MOBILE的X锁,所以提示lock_mode X waiting
第二部分:
然后日志的下半部分说明了事务2当前‘持有的锁’以及‘等待的锁’:
从日志的HOLDS THE LOCKS(S)块中我们可以看到事务2持有索引IDX_MOBILE的X锁,并且是记录锁(Record Lock)。该锁是通过事务2在步骤2执行的update语句申请的。
从日志的WAITING FOR THIS LOCK TO BE GRANTED块中我们可以看到事务2正在申请持有表info_area的索引GEN_CLUST_INDEX的X锁,该锁是delete from info_area where id=1;语句申请的。

eg2:

步骤 事务1 事务2
1 begin; begin;
2 update info_users set name=’aaa’ where id=1;
3 update info_users set name='bbb' where id=2;
4 update info_users set name='bbb' where id=2;
5 update info_users set name=’aaa’ where id=1;

eg3:

步骤 事务1 事务2
1 begin; begin;
2 DELETE from users where uid='bbb';执行成功
3 DELETE from users where uid='bbb';等待
4 ERROR 1213 (40001) insert INTO users VALUES(2,'bbb'); 成功

分析死锁日志:
第一部分
从日志里我们可以看到事务1当前正在执行DELETE from users where uid='bbb';,该条语句正在申请索引UID的X锁,所以提示lock_mode X waiting
第二部分:
然后日志的下半部分说明了事务2当前‘持有的锁’以及‘等待的锁’:
从日志的HOLDS THE LOCKS(S)块中我们可以看到事务2持有索引UID的X锁,并且是记录锁(Record Lock)。该锁是通过事务2在步骤2执行的delete语句申请的。
从日志的WAITING FOR THIS LOCK TO BE GRANTED块中我们可以看到事务2正在申请持有索引UID的S锁,该锁是insert INTO users VALUES(2,'bbb');语句申请的。insert语句在普通情况下是会申请X锁,但是这里出现了S锁。这是因为uid字段是一个唯一索引,所以insert语句会在插入前进行一次duplicate key的检查,为了使这次检查成功,需要申请S锁防止其他事务对uid字段进行修改。

那么为什么该S锁会失败呢?这是对同一个字段的锁的申请是需要排队的。S锁前面还有一个未申请成功的X锁,所以S锁必须等待,所以形成了循环等待,死锁出现了。

通过阅读死锁日志,我们可以清楚地知道两个事务形成了怎样的循环等待,再加以分析,就可以逆向推断出循环等待的成因,也就是死锁形成的原因。

【MySQL】mysql死锁以及死锁日志分析相关推荐

  1. mysql+web日志分析工具_用Python+MySQL实现2017年web日志分析报告

    日志分析在web系统中故障排查.性能分析方面有着非常重要的作用.目前,开源的ELK系统是成熟且功能强大的选择.但是部署及学习成本亦然不低,这里我实现了一个方法上相对简单(但准确度和效率是有保证的)的实 ...

  2. MYSQL统计UV和PV_日志分析_统计每日各时段的的PV,UV

    第一步: 需求分析 需要哪些字段(时间:每一天,各个时段,id,url,guid,tracTime) 需要分区为天/时 PV(统计记录数) UV(guid去重) 第二步: 实施步骤 建Hive表,表列 ...

  3. MySQL Innodb表导致死锁日志情况分析与归纳

    案例描述 在定时脚本运行过程中,发现当备份表格的sql语句与删除该表部分数据的sql语句同时运行时,mysql会检测出死锁,并打印出日志. 两个sql语句如下: (1)insert into back ...

  4. 查看mysql数据库的死锁日志_【MySQL】mysql死锁以及死锁日志分析

    1.死锁的概念 死锁:死锁一般是事务相互等待对方资源,最后形成环路造成的. 对于死锁,数据库处理方法:牺牲一个连接,保证另外一个连接成功执行. 发生死锁会返回ERROR:1213 错误提示,大部分的死 ...

  5. mysql 死锁日志_Mysql死锁以及死锁日志分析

    死锁的概念 死锁:死锁一般是事务相互等待对方资源,***形成环路造成的. 对于死锁,数据库处理方法:牺牲一个连接,保证另外一个连接成功执行. 发生死锁会返回ERROR:1213 错误提示,大部分的死锁 ...

  6. mysql 查看autocommit_手把手教你分析Mysql死锁问题

    点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达 发生死锁了,如何排查和解决呢?本文将跟你一起探讨这个问题 准备好数据环境 模拟死锁案发 分析死锁日志 分析死锁结果 环境准备 数据库隔离级别 ...

  7. Mysql死锁问题,详细分析

    前言 前几天跟一位朋友分析了一个死锁问题,所以有了这篇图文详细的博文,哈哈~ 发生死锁了,如何排查和解决呢?本文将跟你一起探讨这个问题 准备好数据环境 模拟死锁案发 分析死锁日志 分析死锁结果 环境准 ...

  8. mysql数据库批量插数死锁_MySQL 死锁套路:一次诡异的批量插入死锁问题分析

    线上最近出现了批量insert的死锁,百思不得姐.死锁记录如下 2018-10-26T11:04:41.759589Z 8530809 [Note] InnoDB: *** (1) TRANSACTI ...

  9. MySQL - 锁等待及死锁初探

    文章目录 生猛干货 版本信息 MySQL 行锁分析 MySQL死锁演示 排查过程 查看近期死锁日志信息 查询锁等待命令及kill 锁 优化建议 搞定MySQL 生猛干货 带你搞定MySQL实战,轻松对 ...

最新文章

  1. matplotlib画图、如何提高图像分辨率?
  2. ASP.NET Core奇遇记:无用户访问,CPU却一直100%
  3. poj 1016 Numbers That Count【字符串】
  4. JavaScript 开发10个实用技巧
  5. Terraform入门 - 4. destroy 基础设施
  6. JSON字符串与JSON对象的区别
  7. java学习(172): 使用class实现反射编程,创建对象
  8. 分布式存储系统设计 - Gossip
  9. Android PM suspendresume
  10. 小艾机器人apk_小艾QQ群机器人安卓版
  11. ibase4j使用信息心得
  12. 【转】收集各种反编译工具 常用EXE文件反编译工具下载
  13. 啊哈C语言——让计算机多彩的开口说话
  14. java计算ipv6前缀位数
  15. 「CF1154F」Shovels Shop【背包DP】
  16. 查询oracle耗时sql,查看Oracle耗时Sql
  17. arduino入门教程!保姆级细致教学!
  18. 【高级篇 / System】(7.0) ❀ 04. 高可用性 HA 配置 ❀ FortiGate 防火墙
  19. 计算机图形学:机器人的画法与填充
  20. 由注意力机制中scaled sqrt(dk)操作联想到期望与方差的本质推导

热门文章

  1. java实现豆瓣回帖机器人
  2. PHP下拉框选择的实现方法
  3. ASP.NET服务器控件刷新后仍旧保持滚动位置
  4. C# Object.Equals方法深入研究
  5. JS正则表达式详解2
  6. MFC初探 —— 子窗体相对于显示屏位置固定
  7. ubuntu 打不开商店怎么办
  8. Vue监视---vue工作笔记0005
  9. MQTT工作笔记0001---MQTT协议概述
  10. Netty工作笔记0084---通过自定义协议解决粘包拆包问题2