数据库死锁如何解决
死锁
- 指的是多个事务在同一个资源上互相占用并请求对方占用的资源,导致的恶行循环的现象。
- 当多个事务以不同顺序锁定资源的时候就可能产生死锁
- 多个事务同时锁定一个资源也会产生死锁
解决死锁问题
- 数据库系统实现了各种死锁检测和死锁超时机制。
- 越复杂的系统,例如innoDB存储引擎,越能检测到死锁的循环依赖,并立即返回一个错误。这种解决方式很有效,避免了因为死锁导致的非常慢的查询。
- 另一个解决方法,当查询的时间达到锁等待超时的设定后放弃锁请求,这种方式不太好。innodb目前处理死锁的方式是将持有最少行级排它锁的事务进行回滚。
- 死锁发生之后,只有部分/完全回滚其中一个事务,才能打破死锁。
- 对于事务型系统这是没法避免的,所以写代码的时候就要考虑怎么处理死锁。大多数情况下,重新执行因为死锁回滚的事务就可以了