2011-12-02 129 views
1

我有一个JDBC DB2error,操作超时或死锁,错误号为-913。DB2操作超时或死锁

场景:操作1执行更新表中的一行,可能需要2分钟才能完成操作。

操作2试图通过报价单号读取同一行。

有一个默认锁定CS(transaction_read_commited)。 60秒后我看到'操作超时或死锁', 这是超时还是死锁情况?

有没有什么办法可以通过增加连接超时或锁定超时来避免死锁?

建议各地将欣赏..

回答

1

您可以通过修改locktimeout参数来增加锁定超时。

db2 update db cfg using locktimeout 180 

这改变了等待2分钟。你也可以把-1,无限期地等待。

欲了解更多信息http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.config.doc/doc/r0000329.html

的情况是不是死锁,因为操作2并无持有任何资源,它只是试图访问该行被更新。

+0

检查当前超时: 'db2 get db cfg for [数据库名]''' 其中[databasename]是数据库的名称 – mstaessen

0

2分钟排?他们试图去做什么?

无论如何,是的,这是一个超时问题 - 您的操作2正在使用(假定)默认超时。这可以设置每个文件,并且(至少对于iSeries,并且可能对于所有版本的DB2)默认为60秒。

我不知道,如果这个值可以从SQL设置单独 - 你必须使用i系列本机命令CHGPFCHGLF(放慢参数WAITFILE/WAITRECORD,在),如果这是你的平台(你没没有指定)。我并不真的推荐它 - 看看你是否无法更快地运行更新语句......或者,看看如何改变你的架构以允许某种方式。

+0

该操作可能会加载一个blob,如果传输速度很慢,则2分钟可能正常。 – AngocA