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