加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle skip locked的应用

发布时间:2020-12-12 14:33:03 所属栏目:百科 来源:网络整理
导读:开发提了一个需求,就是取合同编码,原先是通过webserver去取,但有时候有性能问题,导致批量处理合同的时候有性能问题。现在要改造成先批量取一批合同编码放在本地。现在遇到的问题是怎么在并发情况下保证取的是不同的合同编码。数据库的skip locked可以解

开发提了一个需求,就是取合同编码,原先是通过webserver去取,但有时候有性能问题,导致批量处理合同的时候有性能问题。现在要改造成先批量取一批合同编码放在本地。现在遇到的问题是怎么在并发情况下保证取的是不同的合同编码。数据库的skip locked可以解决。

1.通过webservice取1000个编号写到本地表中,表中应该有个标志表示是否使用。

2.当程序获取表示未使用的合同编号,select * from t where statut='未使用',假设能取到500条记录,那我循环去取编码select * from t where 编码='001' for update skip locked,如果有记录就说明是可以用的,如果没有记录,说明合同编码被其他人取了,再次循环。如果循环了所有的数据都没有取到,那就去用webservice去取。

3.写一个定时任务,1个小时执行一次,如果编码表里面少于1000个可用的编码,则调用webservice去取。

下面是skip locked的实验:

drop table t;

create table t(a number);
insert into t values(1);
insert into t values(2);
insert into t values(3);
insert into t values(4);
insert into t values(5);
commit;

session1:
SQL> select * from t where A in(1,2) for update skip locked;
A
----------
1
2

session2: SQL> select * from t where A in(1,2) for update skip locked; 未选定行 SQL> select * from t for update skip locked; A ---------- 3 4 5

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读