我有一个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