Oracle 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |