mysql官网解读之如何最小化和处理死锁

死锁的产生

  1. mysql死锁学习第一篇
  2. mysql官网解读之InnoDB Transaction Model

避免死锁

既然存在死锁,那么如何避免死锁呢?

在这里插入图片描述

避免死锁

上图讲解了死锁的原因:数据库的操作不是原子性操作,所以有了各种锁,像gap,表锁行锁。

  1. 使用SHOW ENGINE INNODB STATUS来查看死锁的原因,一般是最后死锁的原因
  2. 第二个框框告诉你,死锁并不可怕,因为innodb会检测死锁进行相应的回滚。
  3. 保持交易小,持续时间短,对于一些占用长时间的请求要进行相应的优化。
  4. 可以使用rc级别的mysql事务隔离级别,在上面的链接也解释了rr和rc的区别以及相关的影响,主要rc是取消了gap锁,当进行范围查询(没有命中唯一索引的时候,rc级别会释放不命中的行数,从而减少死锁的可行性)
  5. 更第4点很像,让mysql命中更精确,更少的行数,从获取更少的锁,减少死锁的可能性。
  6. 减少锁定,比如for update这种表锁级别。
发布了212 篇原创文章 · 获赞 30 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/weixin_38336658/article/details/103728627