码上敲享录 > mysql面试题 > Innodb默认是如何对待死锁的?

Innodb默认是如何对待死锁的?

上一章章节目录下一章 2023-07-17已有145人阅读 评论(0)

InnoDB 是一种常见的 MySQL 存储引擎,它在处理死锁方面使用了一种称为"死锁检测和回滚"的策略。以下是 InnoDB 在默认情况下对待死锁的方式:


1. 死锁检测:InnoDB 会周期性地检测系统中是否存在死锁。当一个事务请求被阻塞并等待资源时,InnoDB 会尝试检测是否存在死锁。如果检测到死锁存在,InnoDB 将选择其中一个事务作为"死锁牺牲者",将其回滚,从而解除死锁。


2. 死锁回滚:当 InnoDB 检测到死锁时,它会选择一个事务作为牺牲者,并回滚该事务。被回滚的事务将放弃所持有的锁,释放资源,以解除死锁。被回滚的事务可以根据需要进行重试或回滚。


3. 死锁优先级:如果多个事务形成了死锁,InnoDB 会根据优先级规则选择死锁牺牲者。通常,优先级较低的事务会被选择为牺牲者。InnoDB 可以通过事务的优先级设置来影响牺牲者的选择过程,较低优先级的事务更有可能成为牺牲者。


需要注意的是,默认情况下,InnoDB 不会自动重试被回滚的事务。重试的责任落在应用程序开发人员身上,他们需要在代码中实现相应的重试逻辑。


若要自定义 InnoDB 的死锁处理行为,可以使用锁等待超时、设置事务超时时间、调整事务的优先级等方法。这些策略的选择取决于具体应用的需求和环境。


向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交