我有一個JDBC DB2error,操作超時或死鎖,錯誤號爲-913。DB2操作超時或死鎖
場景:操作1執行更新表中的一行,可能需要2分鐘才能完成操作。
操作2試圖通過報價單號讀取同一行。
有一個默認鎖定CS(transaction_read_commited)。 60秒後我看到'操作超時或死鎖', 這是超時還是死鎖情況?
有沒有什麼辦法可以通過增加連接超時或鎖定超時來避免死鎖?
建議各地將欣賞..
我有一個JDBC DB2error,操作超時或死鎖,錯誤號爲-913。DB2操作超時或死鎖
場景:操作1執行更新表中的一行,可能需要2分鐘才能完成操作。
操作2試圖通過報價單號讀取同一行。
有一個默認鎖定CS(transaction_read_commited)。 60秒後我看到'操作超時或死鎖', 這是超時還是死鎖情況?
有沒有什麼辦法可以通過增加連接超時或鎖定超時來避免死鎖?
建議各地將欣賞..
您可以通過修改locktimeout參數來增加鎖定超時。
db2 update db cfg using locktimeout 180
這改變了等待2分鐘。你也可以把-1,無限期地等待。
的情況是不是死鎖,因爲操作2並無持有任何資源,它只是試圖訪問該行被更新。
2分鐘排?他們試圖去做什麼?
無論如何,是的,這是一個超時問題 - 您的操作2正在使用(假定)默認超時。這可以設置每個文件,並且(至少對於iSeries,並且可能對於所有版本的DB2)默認爲60秒。
我不知道,如果這個值可以從SQL設置單獨 - 你必須使用i系列本機命令CHGPF
或CHGLF
(放慢參數WAITFILE
/WAITRECORD
,在秒),如果這是你的平臺(你沒沒有指定)。我並不真的推薦它 - 看看你是否無法更快地運行更新語句......或者,看看如何改變你的架構以允許某種方式。
該操作可能會加載一個blob,如果傳輸速度很慢,則2分鐘可能正常。 – AngocA
檢查當前超時: 'db2 get db cfg for [數據庫名]''' 其中[databasename]是數據庫的名稱 – mstaessen