mysql死锁和解决方案

死锁的出生

  • 业余的说在什么的情况下会发生死锁?可能是这种情况:
  • 在同一时刻,一条资源只能让一个人获取;
  • 先获得资源的人,占有资源时间过长,导致后者等待时间过长;
  • 前后获得资源的顺序,形成了闭环
  • 专业的说在什么的情况下会发生死锁?必须满足以下条件:
  • 互斥条件:一个资源每次只能被一个线程使用。
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  • 不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。
  • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

死锁的灭亡

  • 业余的人这样做:
  • 避免在消息队列前后操作同一数据库的表单
  • 选用合适的数据库引擎和索引
  • 一个业务层方法,不要调用另一个有着操作表单的业务层方法
  • and so on…
  • 专业的人这样做:
  • 打破互斥条件,我们需要允许进程同时访问某些资源,因受制于实际场景,不太容易实现;
  • 打破不可抢占条件,这样需要允许进程强行从占有者那里夺取某些资源,或者简单一点理解,占有资源的进程不能再申请占有其他资源,必须释放手上的资源之后才能发起申请,这个其实也很难找到适用场景;
  • 进程在运行前申请得到所有的资源,否则该进程不能进入准备执行状态。这个方法看似有点用处,但是它的缺点是可能导致资源利用率和进程并发性降低;
  • 避免出现资源申请环路,即对资源事先分类编号,按号分配。这种方式可以有效提高资源的利用率和系统吞吐量,但是增加了系统开销,增大了进程对资源的占用时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值