zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Go语言学习笔记(3)
    Haskell语言学习笔记(97)Phantom Type
    Rust语言学习笔记(12)
    堆排序 Rust实现
    Rust 智能指针(Rc)
    Rust 泛型
    Rust 枚举
    Rust 结构体
    Rust 引用
    二叉搜索树
  • 原文地址:https://www.cnblogs.com/ttaall/p/13706040.html
Copyright © 2011-2022 走看看