2010-09-20 35 views
1

与我的其他问题相关,我有一个经典的死锁异常的奇怪情况:由于:java.sql.BatchUpdateException:尝试获取锁定时发现的死锁;尝试重新启动事务。 blablalbla ...什么时候innodb_lock_wait_timeout被忽略?

代码被确定,事实上,它可能会发生死锁。问题是我立即得到异常。我已将“innodb_lock_wait_timeout”变量设置为1小时(3600)。但是,这种例外现在仍然存在。

那么...... G * D的名字是怎么回事?

+0

也许MySQL已经足够聪明,可以识别循环死锁,而不必等待超时命中。 – 2010-09-20 16:23:40

+0

希望不要。 :-)是否有可能在运行时覆盖超时? – 2010-09-20 22:11:50

回答

3

您正在发生死锁lock_wait_timeout变量是查询在超时之前等待获取锁定的时间 - 这不是一回事。

从手册: InnoDB事务在放弃之前可能会等待行锁定的超时时间(以秒为单位)。默认值是50秒。试图访问被另一个InnoDB事务锁定的行的事务将在发生以下错误之前最多挂起几秒钟:

如果您遇到超时,您会看到这一点。你有一个需要修复的适当的死锁。 错误1205(HY000):超出锁定等待超时;尝试重新启动事务

+0

有没有办法检查lock_wait_timeout的有效值? – Sourabh 2013-06-06 11:02:49