死锁

并发的问题就可能出现死锁,在MySQL中同样也有死锁的问题。一般MySQL通过回滚能解决不少死锁的问题,但是死锁是无法完全避免的,可以通过一些方法来尽量减少死锁:

第一,   以固定的顺序访问表和行。比如对两个job批量进行更新,可以对id列表先排序,后执行,这样就避免了交叉等待锁的情形;将两个事务的SQL顺序调整为一致,也能避免死锁。

第二,   大事务拆小。大事务更倾向于死锁,如果业务允许,将大事务拆小。

第三,   同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁概率。

第四,   降低隔离级别。如果业务允许,将隔离级别调低,比如将隔离级别从RR调整为RC,可以避免掉很多因为gap锁造成的死锁。

第五,   为表添加合理索引。如果不走索引将会为表每一行记录添加锁,死锁的概率就增大了。

欢迎批评指正,提出问题,谢谢!
原文地址:https://www.cnblogs.com/xxeleanor/p/14369529.html