DB2 操作超时或死锁

Posted

技术标签:

【中文标题】DB2 操作超时或死锁【英文标题】:DB2 operation Timeout or deadlock 【发布时间】:2011-12-02 18:49:00 【问题描述】:

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

场景:操作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 没有持有任何资源,它只是试图访问正在更新的行。

【讨论】:

检查当前超时:db2 get db cfg for [databasename] 其中 [databasename] 是您的数据库的名称【参考方案2】:

连续 2 分钟?他们到底想做什么?

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

我不确定这个值是否可以单独从 SQL 设置 - 您必须使用 iSeries 的本机命令 CHGPFCHGLF(参数 WAITFILE/WAITRECORD,在 秒),如果那是你的平台(你没有指定)。不过我真的不推荐它 - 看看你是否不能让更新语句运行得更快......或者,看看改变你的架构以允许以某种方式。

【讨论】:

该操作可能是加载一个blob,如果传输慢,2分钟是正常的。

以上是关于DB2 操作超时或死锁的主要内容,如果未能解决你的问题,请参考以下文章

SQL 过程超时

DB2 锁问题分析与解释

RPC服务超时排查思路

死锁是不是会导致任何活动连接超时/中断?

Linq Count() 超时 - 执行超时已过期。操作完成前超时时间已过或服务器无响应

Google App Engine 超时:数据存储操作超时,或数据暂时不可用