我们拥有一个包含四个克隆的WebSphere集群。相同的代码在每个克隆上运行。我们Quartz定期启动一个运行代码的工作。DB2锁定超时
代码尝试更新表中的一行,以便只有一个克隆能够成功更新表,然后该克隆将运行剩余的工作。例如:
update <table> set status = 'RUNNING' where job_name = 'JOB1' and status = 'STOPPED'
当我们执行更新语句时,我们不启动事务。
我们有时看到的是,所有四个克隆都无法更新表,并且全部都获得锁超时错误(sql代码-913)。我们还尝试了一个替代方案,我们开始一个事务,选择查看该行是否标记为正在运行,如果没有,则执行更新和提交;否则回滚。
这有同样的问题。
我们还没有尝试的一个解决方案是将select修改为“select for update”,虽然从我的googleing中,我怀疑这是否会有所帮助。
有什么建议吗?
什么版本的DB2?什么是完整的错误信息?你确定没有别的东西在触摸那张桌子,并且没有触发器(或类似的)?语句的运行频率如何 - 是否有可能以前的事务仍在运行?像这样运行'UPDATE'可能是你最好的选择。 – 2013-03-01 18:22:38