首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL上的死锁与锁等待超时

MySQL上的死锁与锁等待超时
EN

Stack Overflow用户
提问于 2013-05-15 19:29:28
回答 2查看 9.2K关注 0票数 9

有人能给我解释一下在MySQL 5.1上发现的死锁和锁等待错误的区别吗?它是一样的吗?死锁错误是什么时候发生的?锁等待超时是什么时候发生的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-15 20:00:38

每当事务必须获取才能继续的锁之间出现循环依赖关系时,就会发生deadlock:例如,假设事务1持有锁A,但需要获取锁B才能继续;事务2持有锁B,但需要获取锁A才能继续-事务立即死锁(不需要超时),在释放锁之前两者都无法继续。因此,数据库选择要中止/回滚的事务;应用程序代码应该检测到这种可能性并进行相应的处理,通常是通过再次尝试该事务。死锁类似于警察通过命令随机参与者倒车来解决gridlock (没有车辆能够向前移动的十字路口的情况)。

在事务等待锁的过程中,当配置的超时时间(例如,在InnoDB锁的情况下为innodb_lock_wait_timeout )过去时,就会发生InnoDB等待超时,这可能是因为一个缓慢的事务持有该锁并且尚未完成执行,也可能是因为许多事务正在排队等待该锁。如果事务等待的时间更长,那么锁有可能(甚至很有可能)变得可用并已被获取,但存在超时是为了避免应用程序无限期地等待数据库。等待超时类似于司机因为延误而放弃并返回。

票数 33
EN

Stack Overflow用户

发布于 2013-05-16 12:56:13

Deadlock是两个线程无限地等待同一件事。锁等待超时意味着一个线程在等待获取锁时超时,从而防止死锁。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16563843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档