Java 选择“更新跳过锁定行限制”
我有一个用Java编写的程序,它创建了5个线程,从Oracle中选择数据。 select命令如下所示:Java 选择“更新跳过锁定行限制”,java,oracle,queue,batch-processing,Java,Oracle,Queue,Batch Processing,我有一个用Java编写的程序,它创建了5个线程,从Oracle中选择数据。 select命令如下所示: select * from queue_requests where request_status = 0 and date_requested <= sysdate and rownum <= ? for update skip locked 从队列中选择*如果希望每个线程只选择约五分之一的记录,则可以执行以下操作: select * from (select * from q
select * from queue_requests where request_status = 0 and date_requested <= sysdate and rownum <= ? for update skip locked
从队列中选择*如果希望每个线程只选择约五分之一的记录,则可以执行以下操作:
select * from (select * from queue_requests where request_status = 0 and date_requested <= sysdate for update skip locked) where rownum <= ?
select *
from queue_requests
where request_status = 0 and
date_requested <= sysdate and
mod(DBMS_RowID.RowID_Row_Number(queue_requests.rowid),5) = thread_number
rownum <= ?
for update
skip locked;
即使您无法更改数据库,您也可以执行PL/SQL块,以使用游标实现“工作”功能:SKIP LOCKED用于队列处理,即获取队列中的下一个解锁对象。因此,我们的想法是从堆栈顶部只取一件东西。每次抓一把松懈的队伍都表明你没有正确地设计队列。我知道“更新跳过锁定”允许我们选择多行,我只是认为我们不应该这样做。你能解释一下为什么每个块的行数很重要吗?
mod(DBMS_RowID.RowID_Block_Number(queue_requests.rowid),5)