数据库死锁如何解决

死锁

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

解决死锁问题

  • 数据库系统实现了各种死锁检测死锁超时机制
  • 越复杂的系统,例如innoDB存储引擎,越能检测到死锁的循环依赖,并立即返回一个错误。这种解决方式很有效,避免了因为死锁导致的非常慢的查询。
  • 另一个解决方法,当查询的时间达到锁等待超时的设定后放弃锁请求,这种方式不太好。innodb目前处理死锁的方式是将持有最少行级排它锁的事务进行回滚。
  • 死锁发生之后,只有部分/完全回滚其中一个事务,才能打破死锁。
  • 对于事务型系统这是没法避免的,所以写代码的时候就要考虑怎么处理死锁。大多数情况下,重新执行因为死锁回滚的事务就可以了
posted @ 2022-03-09 10:26  张三丰学Java  阅读(430)  评论(0编辑  收藏  举报