DB2锁超时

DB2锁超时,db2,Db2,我们有一个带有四个克隆的WebSphere集群。在每个克隆上运行相同的代码。我们必须定期启动一个运行代码的作业 代码尝试更新表中的一行,以便只有一个克隆能够成功更新表,然后该克隆将运行作业的其余部分。比如: update <table> set status = 'RUNNING' where job_name = 'JOB1' and status = 'STOPPED' 更新集状态='RUNNING',其中job\u name='JOB1'和status='STOPPED'

我们有一个带有四个克隆的WebSphere集群。在每个克隆上运行相同的代码。我们必须定期启动一个运行代码的作业

代码尝试更新表中的一行,以便只有一个克隆能够成功更新表,然后该克隆将运行作业的其余部分。比如:

update <table> set status = 'RUNNING' where job_name = 'JOB1' and status = 'STOPPED'
更新集状态='RUNNING',其中job\u name='JOB1'和status='STOPPED'
我们在执行update语句时不启动事务

我们有时会看到,所有四个克隆都无法更新表,并且都会出现锁超时错误(sql代码-913)

我们还尝试了另一种方法,即启动事务,选择查看行是否标记为正在运行,如果没有,则执行更新和提交;否则就会倒退

这也有同样的问题

我们还没有尝试的一个解决方案是将select修改为“select for update”,尽管从我的谷歌搜索中,我怀疑这是否会有所帮助


有什么建议吗?

这最终不是一个问题(这就是我听别人讲话而不亲自检查的结果)

我用两个克隆在我们的开发环境中进行了测试。其中一个克隆偶尔会看到-913锁超时错误,而另一个克隆会成功更新表。除了难看的日志消息,一切都正常工作

然而,通常情况下,我们不会得到-913错误,而是得到一个警告,指示其中一个克隆没有要更新的行。同样,这种行为是好的


因此,正如我们最初所想,Clockwork Muse也建议的那样,以这种方式使用UPDATE语句来强制执行锁在DB2中工作得很好。

什么版本的DB2?完整的错误消息是什么?你确定没有其他东西碰到那张桌子,也没有触发器(或类似的)吗?语句以这种方式运行的频率是多少?是否可能以前的事务仍在运行?像这样运行
更新
可能是最好的选择。