数据库死锁如何解决

死锁指的是多个事务在同一资源上相互占用并请求锁定对方占用的资源而导致恶性循环的现象。当多个事务试图以不同顺序锁定资源时可能就会产生死锁,多个事务同时锁定同一个资源也会产生死锁。

  • 为了解决死锁问题,数据库系统实现了死锁检测和死锁超时机制。
  • 越复杂的系统,例如InnoDB存储引擎,越能检测到死锁的循环依赖,并立即返回一个错误。这种解决方式很有效,否则死锁会导致出现非常慢的查询。
  • 还有一种解决方法,就是当查询的时间达到锁等待超时的设定后放弃锁请求,这种方式通常来说不太好。

innoDB目前处理死锁的方法是将持有最少行级排他锁的事务进行回滚。

死锁发生后,只有部分或者完全回滚其中一个事务,才能打破死锁。对于事务型系统这是无法避免的,所以应用程序设计时必须考虑如何处理死锁。大多数情况下只需要重新执行因死锁回滚的事务即可。

欢迎批评指正,提出问题,谢谢!
原文地址:https://www.cnblogs.com/xxeleanor/p/14979493.html