<分区>
任何人都可以详细解释一下在 MySQL 5.1 上发现的死锁和 Lockwait 错误的区别。只是一样吗?什么时候发生死锁错误,什么时候发生lockwait超时?
<分区>
任何人都可以详细解释一下在 MySQL 5.1 上发现的死锁和 Lockwait 错误的区别。只是一样吗?什么时候发生死锁错误,什么时候发生lockwait超时?
最佳答案
死锁 每当事务必须获取锁才能继续执行时,循环依赖就会发生:例如,假设事务 1 持有锁 A 但需要获取锁 B 才能继续;事务 2 持有锁 B 但需要获取锁 A 才能继续 - 事务立即死锁(不需要超时)并且在释放其锁之前都无法继续。因此数据库选择一个事务来中止/回滚;应用程序代码应该检测到这种可能性并相应地处理,通常是再次尝试事务。死锁类似于警察解决 gridlock (在没有车辆能够前进的路口的情况下)通过命令随机参与者倒车。
等待超时发生在配置的超时时间(例如innodb_lock_wait_timeout
在 InnoDB 锁的情况下)在事务等待锁时过去,可能是因为慢事务持有锁并且尚未完成执行,或者可能是因为许多事务正在排队等待锁。如果事务等待更长时间,锁可能(甚至可能)变得可用并已被获取,但存在超时是为了避免应用程序无限期地等待数据库。等待超时类似于司机因延误而放弃并返回。
关于mysql - MySQL 上的死锁与锁等待超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16563843/