mysql - 了解 mysql 8.0.11 中的死锁
问题描述
我在 mysql 8.0.11 上的“显示引擎 innodb 状态”中发现了下面的死锁。根据我的理解,两个查询都应该只锁定一行(两个查询的主键 user_id 不同)。但是第二个查询"*** (2) HOLDS THE LOCK(S): "RECORD LOCKS space id 5461 page no 76054 n bits 96 index PRIMARY of table
用户"`
第一个查询正在等待获取相同的锁。我不明白为什么?即使两个 lock 语句都说"locks rec but not gap"
这意味着两者都只锁定单个记录(这应该是他们的主键 user_id )想知道我的理解(如上所述)是否正确?如果是,那么如何解释以下日志?
*** (1) TRANSACTION:
mysql tables in use 1, locked 1
LOCK WAIT 3 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 1
update `user` set `user`.`xxxx` = 1 where ( user_id = 4939334)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 5461 page no 76054 n bits 96 index PRIMARY of table `user` trx id 5385693398 lock_mode X locks rec but not gap waiting
Record lock, heap no 24 PHYSICAL RECORD: n_fields 20; compact format; info bits 0
*** (2) TRANSACTION:
mysql tables in use 1, locked 1
3 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 1
update `user` set `user`.`xxxx` = 1 where ( user_id = 4917613)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 5461 page no 76054 n bits 96 index PRIMARY of table `user` trx id 5385693399 lock_mode X locks rec but not gap
Record lock, heap no 24 PHYSICAL RECORD: n_fields 20; compact format; info bits 0
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 5461 page no 63136 n bits 88 index PRIMARY of table `user` trx id 5385693399 lock_mode X locks rec but not gap waiting
Record lock, heap no 19 PHYSICAL RECORD: n_fields 20; compact format; info bits 0
解决方案
推荐阅读
- r - 从R中的2个或更多csv文件合并后如何保持数据不变
- java - Java 将响应内容类型设置为多个 servlet
- c# - Entity Framework Core 原始 SQL 错误:System.ArgumentException 已添加具有相同键的项。键:ID
- reactjs - React hooks - 如何测试多个 useState hooks
- java - 在 Spring Boot 中验证 Rest Controller URL
- c++ - 无法从模板类中的模板函数类调用类函数
- xsd - 两个属性之间的 XSD(按位)逻辑
- amazon-web-services - 如何使用 eb 扩展将 ec2 实例添加到 aws 中的现有目标组
- jmeter-5.0 - 从响应中提取值并在下一个采样器请求正文中使用它
- arduino - SIM7600CE - 如何通过软件知道SIM卡何时注册到网络