开发者社区> 问答> 正文

在数据库中比如MySQL什么是死锁?怎么解决?

在数据库中比如MySQL什么是死锁?怎么解决?

展开
收起
Carice 2021-10-16 22:28:26 2578 0
2 条回答
写回答
取消 提交回答
  • 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。 此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。 简而言之,就是我和你都拿到某个资源,我需要等你手中的资源释放以后我才能去干接下来的活,你也需要等我手中的资源释放之后才能去继续干接下来的活,这样就好了,咱俩就一直等着吧,就形成了死锁,如果没有外力打破这种互相等待的尴尬,那么死锁就会一直持续下去。

    解决方法 1、预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件

    2、避免死锁:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁

    3、检测死锁:允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉

    4、解除死锁:该方法与检测死锁配合使用

    2021-10-16 22:40:01
    赞同 展开评论 打赏
  • 网络规划设计师、敏捷专家、CISP、ITSS服务经理、ACA全科目、ACP4项、ACE、CBP、CDSP、CZTP等。拥有 PRINCE2 Foundation/Practitioner、CCSK、ITIL、ISO27001、PMP等多项国际认证。 专利5+、期刊10+、知识产权师。核心期刊审稿人。

    您好,

    死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。

    死锁有四个必要条件:互斥条件,请求和保持条件,环路等待条件,不剥夺条件。

    解决死锁思路,一般就是切断环路,尽量避免并发形成环路。

    如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会。
    在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;
    对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率;
    如果业务处理不好可以用分布式事务锁或者使用乐观锁
    死锁与索引密不可分,解决索引问题,需要合理优化你的索引
    
    2021-10-16 22:57:07
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载

相关镜像