2013-05-15 37 views
2

任何人都可以解释我在MySQL 5.1上找到的死锁和Lockwait错误的细节。它是一样的吗?什么时候发生死锁错误以及锁定超时发生在什么时候?MySQL上的死锁与Lockwait超时

回答

13

死锁发生其中存在交易必须为了继续获得锁之间的循环依赖关系:例如,假设事务1持有锁A,但需要获得锁B至前进;并且交易2持有锁B但需要获得锁A以继续进行—交易是立即死锁(不需要超时)并且两者都可以继续,直到释放其锁。因此,唯一的解决方案是回滚一个事务(应用程序代码应检测到这种可能性并进行相应处理,通常是通过再次尝试事务)。

等待超时当配置的超时周期(例如innodb_lock_wait_timeout InnoDB的锁的情况下 )为止,而事务等待一个锁,也许是因为一个缓慢的查询持有锁并且尚未完成执行发生。如果事务等待时间更长,则可能(甚至有可能)该锁将变为可用并被获取,但是存在超时以避免应用程序无限期地等待数据库。

1

死锁是两个线程无限等待在同一件事情上。 锁定等待超时表示一个线程在等待锁定时超时,从而防止死锁。

+0

这篇文章中的大部分内容都是错误的。新来者请采取eggyal的答案。 –