死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。看图形象一点,如下:
死锁有四个必要条件:互斥条件,请求和保持条件,环路等待条件,不剥夺条件。
解决死锁思路,一般就是切断环路,尽量避免并发形成环路。
1、 如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会。
2、 在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;
3、 对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率;
4、 如果业务处理不好可以用分布式事务锁或者使用乐观锁
5、 死锁与索引密不可分,解决索引问题,需要合理优化你的索引
Was this helpful?
0 / 0