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 的本机命令 CHGPF
或 CHGLF
(参数 WAITFILE
/WAITRECORD
,在 秒),如果那是你的平台(你没有指定)。不过我真的不推荐它 - 看看你是否不能让更新语句运行得更快......或者,看看改变你的架构以允许以某种方式。
【讨论】:
该操作可能是加载一个blob,如果传输慢,2分钟是正常的。以上是关于DB2 操作超时或死锁的主要内容,如果未能解决你的问题,请参考以下文章