MySql 更新死锁问题 Deadlock found when trying to get lock; try restarting transaction#
在MySQL客户端下输入命令:
show engine innodb status \G;
在打印出来的信息中找到“LATEST DETECTED DEADLOCK”一节内容
几种方法的对比情况:
(1)使用show processlist查看不靠谱;
(2)直接使用show engine innodb status查看,无法判断到问题的根因;
(3)使用mysqladmin debug查看,能看到所有产生锁的线程,但无法判断哪个才是根因;
(4)开启innodb_lock_monitor后,再使用show engine innodb status查看,能够找到锁阻塞的根因。
https://www.cnblogs.com/duanxz/p/4394641.html
一、背景
在mysql处理死锁问题时,由于show engine innodb status输出来的死锁日志无任务事务上下文,并不能很好地诊断相关事务所持有的所有锁信息,包括:锁个数、锁类型等。
于是,需要能查看到更详细的事务锁占用情况。
二、INNODB监控机制(InnoDB Monitors)
mysql提供一套INNODB监控机制,用于周期性(每15钞)输出INNODB运行相关状态(INNODB运行状态、表空间状态、表状态等)到mysqld服务标准错误输出。另外,INNODB标准监控和锁监控,也可以通过命令:show engine innodb status输出到控制台。
此部分内容一般输出到mysql error log里(查找日志位置,参见“补充知识”)。
https://www.136.la/mysql/show-46448.html
https://www.cnblogs.com/likui360/p/5845045.html
https://www.cnblogs.com/wangdong/p/9235249.html
https://www.jianshu.com/p/6049b046e7b4
https://www.cnblogs.com/hunternet/p/11383360.html
https://segmentfault.com/a/1190000018730103
https://zhuanlan.zhihu.com/p/59000837
https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html#innodb-record-locks
https://dba.stackexchange.com/questions/116113/meaning-of-locks-rec-but-not-gap-waiting-in-deadlock-report
https://www.jianshu.com/p/59b7db431da2
https://www.cnblogs.com/leohahah/p/12067100.html
死锁原因:联合住建的批量插入请求中,两个协程同时发起这个sql,里面插入多条记录,导致写锁和间隙锁冲突,最后发生死锁。
解决办法:请求枷锁,只有第一个抢到全局锁的请求能够处理这个插入请求