2010-09-20 92 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