Oracle SEQUENCE-“增量”和“缓存”

时间:2019-04-08 14:32:37

标签: java oracle hibernate spring-boot jpa

我在Spring Boot应用程序中将JPA和hibernate一起使用。批量处理时,我遇到一些插入性能问题。到目前为止,我发现的解决方法是:

  1. 更改Oracle Sequence的'Increment by> 1,我给出50'
  2. 在Java实体中,将allocationSize与Oracle Increment By的值相同

这样,JPA可以阻止调用获取下一个序列。 我的序列定义为: CREATE SEQUENCE MYSCM.BOOKING_SCHED_SEQ INCREMENT BY 1 MAXVALUE 9999999999999999999999999999 MINVALUE 1 CACHE 20

当我将INCREMENT BY增加到50时,缓存应该增加到50还是减少?

1 个答案:

答案 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交谈过?