我在Spring Boot应用程序中将JPA和hibernate一起使用。批量处理时,我遇到一些插入性能问题。到目前为止,我发现的解决方法是:
Increment by
> 1,我给出50'allocationSize
与Oracle Increment By
的值相同这样,JPA可以阻止调用获取下一个序列。
我的序列定义为:
CREATE SEQUENCE MYSCM.BOOKING_SCHED_SEQ INCREMENT BY 1 MAXVALUE 9999999999999999999999999999 MINVALUE 1 CACHE 20
当我将INCREMENT BY
增加到50时,缓存应该增加到50还是减少?
答案 0 :(得分:3)
当我将INCREMENT BY增加到50时,缓存应该增加到50还是减少?
都不是。 INCREMENT BY和CACHE之间没有任何关系。
INCREMENT BY控制序列的单调性。使用INCREMENT BY 50,该系列将进入1, 51, 101, 151
,依此类推。
CACHE控制在内存中保留多少个序列号以服务NEXTVAL请求。 CACHE编号越小,数据库从内部表读取的次数就越多,以获取下一个分配范围。因此,在中等繁忙的系统中,我们希望将获取的闩锁的数量减至最少,因此我们将CACHE设置为较高的数字,例如1000。
人们着迷于设置CACHE值,因为他们认为如果CACHE值太高,他们可能会“丢失”某些值并在其序列中存在缺口。这极不可能发生,即使如此,我们也不在乎。序列是保证唯一值的来源,没有其他意义。
尽管,重新阅读您的问题,我认为这不会对您的散装刀片的性能产生任何影响。您为什么选择专注于序列分配?您是否进行了任何跟踪以发现瓶颈在哪里?您是否与DBA交谈过?