【发布时间】:2020-02-11 23:23:28
【问题描述】:
我有一个情况,我有多个(可能数百个)线程重复相同的任务(如果你好奇,使用 java 调度执行器)。此任务需要选择尚未处理的更改行(从名为 change 的表中)(已处理的更改在名为 process_change_rel 的 m:n 连接表中跟踪,该表跟踪进程 ID、记录 ID 和状态)处理它们,然后更新回状态。
我的问题是,如何防止来自同一进程的两个线程选择同一行?以下解决方案(用于更新锁定行)是否有效?如果没有,请提出一个可行的解决方案
Create table change(
—id , autogenerated pk
—other fields
)
Create table change_process_rel(
—change id (pk of change table)
—process id (pk of process table)
—status)
下面列出了我将使用的查询
Select * from
change c
where c.id not in(select changeid from change_process_rel with cs) for update
请告诉我这是否可行
【问题讨论】:
-
什么是 Db2 版本和平台?
-
我正在使用 db2 luw 11
-
试试 CS 隔离级别?
-
你为什么选择 ur?
标签: db2 race-condition db2-luw transaction-isolation rowlocking