MySQL死锁、资源竞争死锁

什么是MySQL死锁:

MySQL死锁、资源竞争死锁
image.png
MySQL死锁、资源竞争死锁
image.png

什么是资源竞争死锁:

比如连接池 ShardingSphere文档中写到关于 数据库连接的资源竞争问题

MySQL死锁、资源竞争死锁
image.png
MySQL死锁、资源竞争死锁
image.png

如何避免死锁:

思路:

  • 1、 因为加锁而导致死锁, 所以放弃使用悲观锁方案, 改为乐观锁方案

  • 2、 如果不能用乐观锁,则用分布式锁,放宽锁的粒度, 用一个锁来保护单表或多表中的多行资源;缺点是: 只能尽可能的解决了死锁的问题, 不能完全解决死锁的问题, 因为业务接口众多,业务逻辑众多, 可能会导致不一致、死锁; 所以不建议用。

乐观锁: 通过添加一个version
更新一次version++

悲观锁处理幂等性的方法:
解决了幂等性一锁、二判、三更新的问题

乐观锁处理幂等性的方法:
1、 查询: 查询目标记录连带version字段一同返回
2、 判断: 判断是否需要更新、以及是否已经更新
3、 更新: 乐观锁更新,通过比较版本号实现比较

乐观锁幂等性更新示例:


MySQL死锁、资源竞争死锁
image.png
MySQL死锁、资源竞争死锁
image.png
MySQL死锁、资源竞争死锁
image.png
MySQL死锁、资源竞争死锁
image.png