我有JDBC DB2error,操作超时或死锁,错误号:-913。
场景:操作1在表中执行更新行,这可能需要2分钟才能完成操作。
操作2试图按报价编号读取同一行。
有一个默认锁定CS(transaction_read_commited)。 我在60秒后看到'操作超时或死锁', 这是超时或死锁情况吗?
有没有办法可以通过增加连接超时或锁定超时来避免死锁?
周围的建议将是欣赏..
答案 0 :(得分:2)
您可以通过修改locktimeout参数来增加锁定超时。
db2 update db cfg using locktimeout 180
这改变了等待2分钟。你也可以把-1,无限期地等待。
该方案不是死锁,因为操作2不包含任何资源,它只是尝试访问正在更新的行。
答案 1 :(得分:0)
在任何情况下,是的,这是一个超时问题 - 您的操作2正在使用(假定的)默认超时。这可以设置为每个文件,并且(至少对于iSeries,可能对于所有版本的DB2)默认为60秒。
我不确定是否可以单独使用SQL设置此值 - 您必须使用iSeries的本机命令CHGPF
或CHGLF
(参数WAITFILE
/ {{1} },在秒中),如果那是你的平台(你没有指定)。我不是真的推荐它 - 看看你是否无法更快地运行更新语句...或者,请参阅更改您的架构以允许某种方式。