Innodb 死锁案例解析

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介:

先贴上案例信息吧:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
*** (1) TRANSACTION:
TRANSACTION 52EDC5761, ACTIVE 0 sec inserting
mysql tables  in  use 1, locked 1
LOCK WAIT 3 lock struct(s), heap size 1248, 2 row lock(s)
MySQL thread  id  34815573, OS thread handle 0x7f1e42a6a700, query  id  9442822687 192.168.1.216 pns update
INSERT IGNORE INTO user_device_app (uid,aid) VALUES(22504356,219843041)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space  id  527 page no 7603 n bits 584 index `PRIMARY` of table `pns`.`user_device_app` trx  id  52EDC5761 lock_mode X lock
s rec but not gap waiting
*** (2) TRANSACTION:
TRANSACTION 52EDC5762, ACTIVE 0 sec inserting
mysql tables  in  use 1, locked 1
3 lock struct(s), heap size 1248, 2 row lock(s)
MySQL thread  id  34823701, OS thread handle 0x7f1e58309700, query  id  9442822688 192.168.1.86 pns update
INSERT IGNORE INTO user_device_app (uid,aid) VALUES(22504356,219843041)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space  id  527 page no 7603 n bits 584 index `PRIMARY` of table `pns`.`user_device_app` trx  id  52EDC5762 lock mode S lock
s rec but not gap
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space  id  527 page no 7603 n bits 584 index `PRIMARY` of table `pns`.`user_device_app` trx  id  52EDC5762 lock_mode X lock
s rec but not gap waiting
*** WE ROLL BACK TRANSACTION (2)

解释说明下: uid,aid 做为主键,且程序中未开启事务;对于user_device_app 表也只有 delete... ; insert ignore ...., select 三个操作;

死锁是由两个完全相同的语句: insert ignore into user_device_app 造成的;

个人在测试环境,怎么也不能重现死锁的现象

后经请教: insert ignore 是先获得S锁(共享锁),然后在升级为X锁;(所以死锁信息中事务2在后的S锁后,又开始获得X锁)

由于两个事务同时获得了S锁,都升级为X锁的时候,都在互相等待,所以出现死锁现象;

小结:

数据库端:若要避免使用ignore 这样的关键字陷入死锁中:

要禁止同一行并行执行INSERT…ON DUPLICATE KEY特别是INSERT…ON DUPLICATE KEY UPDATE ,以及INSERT IGNORE语句。实在不行就改为(select + insert 来处理)

程序端

要有捕捉死锁回滚信息的代码;

对于防止用户点击多次,造成重复记录的,可以在前端代码中做出限制






本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/1309953,如需转载请自行联系原作者

目录
相关文章
|
9月前
|
开发框架 .NET 中间件
.net8 使用 license 证书授权案例解析
本文介绍了如何使用 `.NET CLI` 创建并改造一个 `ASP.NET Core Web API` 项目,以实现基于许可证的授权机制。具体步骤包括创建项目、添加必要的 NuGet 包(如 `Standard.Licensing` 和 `Swashbuckle.AspNetCore`),以及修改 `Program.cs` 文件以集成自定义的许可证验证中间件。项目结构中新增了 `LicenseController` 接口用于处理授权相关操作,并通过测试流程验证了默认天气接口在未授权和授权状态下的响应情况。整个过程确保了应用程序能够在启动时正确验证许可证,保障系统的安全性与可控性。
490 8
.net8 使用 license 证书授权案例解析
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
532 76
|
9月前
|
机器学习/深度学习 人工智能 搜索推荐
技术革新下的培训新趋势:案例解析
从最初的“试试看”,到如今的“非做不可”,企业培训已经成为央国企和上市公司不可或缺的战略环节。无论是AI与大模型的赋能,DeepSeek,还是具身智能、智算技术和数据科学的实战应用,这些课程都在为企业打开新的可能性。
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
1022 1
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
存储 监控 调度
云服务器成本优化深度解析与实战案例
本文深入探讨了云服务器成本优化的策略与实践,涵盖基本原则、具体策略及案例分析。基本原则包括以实际需求为导向、动态调整资源、成本控制为核心。具体策略涉及选择合适计费模式、优化资源配置、存储与网络配置、实施资源监控与审计、应用性能优化、利用优惠政策及考虑多云策略。文章还通过电商、制造企业和初创团队的实际案例,展示了云服务器成本优化的有效性,最后展望了未来的发展趋势,包括智能化优化、多云管理和绿色节能。
|
存储 人工智能 自然语言处理
高效档案管理案例介绍:文档内容批量结构化解决方案解析
档案文件内容丰富多样,传统人工管理耗时低效。思通数科AI平台通过自动布局分析、段落与标题检测、表格结构识别、嵌套内容还原及元数据生成等功能,实现档案的高精度分块处理和结构化存储,大幅提升管理和检索效率。某历史档案馆通过该平台完成了500万页档案的数字化,信息检索效率提升60%。
457 5
|
Prometheus 监控 Cloud Native
实战经验:成功的DevOps实施案例解析
实战经验:成功的DevOps实施案例解析
636 6
|
8月前
|
存储 网络协议 关系型数据库
MySQL8.4创建keyring给InnoDB表进行静态数据加密
MySQL8.4创建keyring给InnoDB表进行静态数据加密
311 1
|
3月前
|
存储 关系型数据库 MySQL
介绍MySQL的InnoDB引擎特性
总结而言 , Inno DB 引搞 是 MySQL 中 高 性 能 , 高 可靠 的 存 储选项 , 宽泛 应用于要求强 复杂交易处理场景 。
168 15
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
2064 57
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)

推荐镜像

更多
  • DNS