没有合适的资源?快使用搜索试试~ 我知道了~
jKill#basic-notes#什么情况下会发生死锁,如何解决死锁?1
需积分: 0 1 下载量 195 浏览量
2022-07-25
14:27:34
上传
评论
收藏 5KB MD 举报
温馨提示
会出现死锁的情况产生死锁的4个必要条件:互斥:资源一次只允许一个session访问,其他session需要等待正在访问的事务结束。如何解决死锁通用的死锁解决方案
资源推荐
资源详情
资源评论
## 什么情况下会发生死锁,如何解决死锁?
> 死锁可能出现在在所有使用锁的场景,包括应用内线程之间,微服务之间,数据库内部锁等等。以下仅讨论MySQL数据库的死锁。
### 会出现死锁的情况
产生死锁的4个必要条件:
- 互斥:资源一次只允许一个session访问,其他session需要等待正在访问的事务结束。
- 占有且等待:session占用资源A,并且等待着另一个资源B。
- 不可抢占:已经被获得的资源,不可以被另一个session抢占。
- 循环等待:session1等待session2,session2等待session3,session3等待session1,构成一个闭合的环形等待链。
举个例子,一个session持有锁A,等待获得锁B,但锁B的持有者在等待获得锁A。两个互相等待的session形成一个闭合的“等待圈”,互相阻塞。实际场景可能会有更多的seesion,但只要形成闭合的“等待圈”,都会死锁。
### 如何解决死锁
通用的死锁解决方案是破坏死锁4个必要条件之一,对于MySQL数据库而言,需要破坏前3个条件的场景较少,所以这里只讨论破坏循环等待这一条件。MySQL从5.6开始默认会自动检测死锁,尽量回滚其中较小的一个事务。就是通过破坏循环等待来解决的。为了尽可能减少和解决死锁,MySQL官方文档给出了以下建议:
- 使用事务(行锁)代替锁表。
- insert或update尽可能使用小事务,保证事务不会太长,减少事务间冲突。
- 不同的事务更新更新多个表或者非常多行数据的时候,�
点击阅读更多
资源评论
永远的12
- 粉丝: 935
- 资源: 320
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功