如何解决MySQL更新索引死锁
这样的表:
CREATE TABLE `tablename` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`employee_id` char(32) NOT NULL COMMENT '',`company_id` char(32) NOT NULL COMMENT '',PRIMARY KEY (`id`),UNIQUE KEY `employee_id` (`employee_id`),KEY `company_id` (`company_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 ;
死锁信息如下:
最新检测到的死锁
(1)交易: 交易1022928193,有效阅读起始索引为0.102秒 mysql表正在使用中1,锁定1 LOCK WAIT 4个锁结构,堆大小1184、3个行锁,撤消日志条目1 LOCK BLOCKING MySQL线程ID:39587496块23636610
更新表名设置为a = 0,其中company_id ='aaa'AND employee_id ='bbb'AND状态= 0 ***(1)等待授予此锁: RECORD LOCKS空间ID 986页号29128 n位272表
employee_id
的索引tablename
trx id 1022928193 lock_mode X锁定记录但不等待间隙 记录锁定,堆号202物理记录:n_fields 2;紧凑格式信息位0 0:len 30;十六进制33333333333; asc 5555555555; (总共32个字节); 1:伦4;十六进制800b2b51; asc + Q ;;
(2)交易: 交易1022927750,活动中的5.494秒起始索引读取 mysql表正在使用中1,锁定1 988个锁结构,堆大小144936、2223行锁,撤消日志条目1111
更新表名设置为a = 0,其中company_id ='aaa'AND employee_id ='ccc'AND状态= 0 ***(2)持有锁: RECORD LOCKS空间ID 986页号29128 n位272表
employee_id
的索引tablename
trx id 1022927750 lock_mode X锁定rec但不缝隙 记录锁定,堆号202物理记录:n_fields 2;紧凑格式信息位0 0:len 30;十六进制33333333333; asc 5555555555; (总共32个字节); 1:伦4;十六进制800b2b51; asc + Q ;;
(2)等待授予此锁定: RECORD LOCKS空间ID 986页号21424 n位456表
employee_id
的索引tablename
trx id 1022927750 lock_mode X锁定记录但不等待间隙 记录锁定,堆号212物理记录:n_fields 2;紧凑格式信息位0 0:len 30;十六进制373038626465646361343361343566386238636435373066666234303962; asc 708bdedca43a45f8b8cd570ffb409b; (总共32个字节); 1:伦4;十六进制800b2d71; asc -q ;;
***我们回滚交易(1
我不了解死锁的原因
我认为使用'employee_id'索引,它将很好地工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。