MySQL死锁解决原则

来源:互联网 发布:windows驱动程序包很多 编辑:程序博客网 时间:2024/06/06 21:01
原则之一
要分析一个死锁, 必须深入业务,了解整个事务的逻辑(闭门无法造车)

原则之二
GAP锁很复杂,为了减少GAP锁,减少GAP导致的死锁,尽量选择Read    Committed隔离级别( RC +    row    based    binlog,基本上能够解决所有问题,无需使用Repeatable    Read)
适当的减少Unique索引,能够减少GAP锁导致的死锁(根据业务情况而定)

原则之三
在MySQL中,以不同索引的过滤条件, 来操作相同的记录( Update/Delete),很容易产生死锁。 (例如:如上例所示,执行计划分别走u和a索引,但是均操作了id    =    3这一列,产生死锁。)

原则之四
RC隔离级别下,如果死锁中出现Next    Key( Gap锁),说明表中一定存在unique索引多语句事务产生的死锁,确保每条语句操作记录的顺序性,能够极大减少死锁
0 0