index_merge导致MySql死锁问题

index-merge 导致线上死锁问题

 

问题造成条件:

两个事务分别执行两次update操作 

每个用到了两个及以上索引 由于两边索引顺序不一致导致

 

造成原因:

InnoDB使用索引来实现行级别的锁,

事务A 通过index1 对某个字段加了锁  

事务B 通过index2 对另一个字段加了锁

两个事务都持有自己的锁 并想锁对方已经加了锁的字段  ——造成死锁

 

解决方案:

1. 修改sql逻辑  现根据一条索引的条件查出主键,update操作都基于主键gid去操作

2. 使两个事务的update 的where条件只用一条索引 (或者将合成联合索引)

3. index_merge : off

 

详细案例:

 

另一个案例分析 https://blog.csdn.net/hehehaha1123/article/details/59058067

posted @ 2020-09-21 15:49  六小扛把子  阅读(309)  评论(0编辑  收藏  举报