死锁案例 一

本文详细分析了在MySQL 5.6中,RR事务隔离级别下,死锁发生的两种情况:一是普通索引环境下的死锁,二是唯一键环境下的死锁。通过具体的案例解析了死锁产生的原因和锁的类型,指出在RC隔离级别和ROW BASE BINLOG模式下可以减少死锁,但唯一键冲突导致的死锁仍难以避免。建议在设计表结构时减少unique索引以降低死锁概率。
摘要由CSDN通过智能技术生成

一、前言

死锁,其实是一个很有意思也很有挑战的技术问题,大概每个 DBA 和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。

二、案例分析

2.1 环境说明

MySQL 5.6 事务隔离级别为 RR。

 
  1. CREATE TABLE `ty` (

  2.  `id`int(11) NOT NULL AUTO_INCREMENT,

  3.  `a`int(11) DEFAULT NULL,

  4.  `b`int(11) DEFAULT NULL,

  5.  PRIMARY KEY (`id`),

  6.  KEY `idxa` (`a`)

  7. ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4

  8. insert into ty(a,b) values(2,3),(5,4),(6,7);

2.2 测试用例

2.3 死锁日志

 
  1. ------------------------

  2. LATEST DETECTED DEADLOCK

  3. ------------------------

  4. 2017-09-0922:34:137f78eab82700

  5. *** (1) TRANSACTION:

  6. TRANSACTION 462308399, ACTIVE 33 sec starting index read

  7. mysql tables inuse1, locked 1

  8. LOCK WAIT 2lockstruct(s), heap size 360, 1 row lock(s)

  9. MySQL thread id 3525577, OS thread handle 0x7f896cc4b700, query id 780039657 localhost root updating

  10. deletefrom ty where a=5

  11. *** (1) WAITING FOR THIS LOCK TO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值