专栏名称: ImportNew
伯乐在线旗下账号,专注Java技术分享,包括Java基础技术、进阶技能、架构设计和Java技术领域动态等。
目录
今天看啥  ›  专栏  ›  ImportNew

MySQL innoDB 间隙锁产生的死锁问题

ImportNew  · 公众号  · Java  · 2023-10-30 11:30
    

文章预览

(给 ImportNew 加星标,提高Java技能) 背景 线上经常偶发死锁问题,当时处理一张表,也没有联表处理,但是有两个 mq 入口,并且消息体存在一样的情况,频率还不是很低,这么一个背景,我非常容易怀疑到,两个消息同时进到这一个事务里面导致的,但是是偶发的,又模拟不出来什么场景会导致死锁,只能进行代码分析,问题还原的方式去排查问题。 业务代码简化成下面 begin update test set yn = 0 where dm_code = "3" ; SELECT * from test where dm_code = '3' INSERT INTO demand_flow_followers (dm_code, erp ) values ( '3' ,  'a' ), ( '3' ,  'b' ), ( '3' ,  'c' ) 也就是说先 update、select、insert 这么一个顺序。 表中存在 dm_code、erp 唯一索引。 如果不存在索引 第一行 update 会导致行锁升级为表锁,反而不会导致问题出现,但是并发太差。 结论 先说结论: 重点:无论哪个事务 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览