mysql怎么解决死锁?

2020-05-29 18:04发布

3条回答
小鲸鱼
2020-05-29 18:21 .采纳回答

① 设置锁优先级:提前设置优先级,如果运行A和B出现死锁,优先级低的回滚,优先级高的先执行,这样即可解决死锁问题。
② 以固定顺序访问:设定一个顺序,比如先A后B,或者先B后A,保证不管在什么时候都尊重这个顺序(通常是按ID大小的顺序),这样就会减少死锁发生的概率了。
③ 设置锁超时时间set lock_timeout:尝试获取锁的时候加一个锁超时时间,超过这个时间放弃对该锁请求。比如设置A的超时时间为10毫秒,B为100毫秒,A试了10毫秒以后获取不到资源,然后会自动断开,A断开了,这时B就可以获取资源了,避免了死锁。(但是这个方法不太好的地方在于,还需要对A再提交一次,而且timeout时间需要综合很多其他因素去设置)
④ 对所使用的数据全部加锁:每一个事务一次就将所有要使用到的数据全部加锁,否则就不允许执行,比如A在给B转钱的时候,会使用到A账户转账前,A相互转账后,B账户转账前,B账户转账后,所以就算是A给B转账,也要把A.B账户所有信息都一起加锁(这样B想给A转账也不行,因为被锁住了,不过这个还是傻,效率很低,可能又会带来其他死锁问题)

一周热门 更多>