Oracle SEQUENCE - '增量'和'缓存'

Aru*_*run 2 java oracle hibernate jpa spring-boot

我在 Spring 启动应用程序中使用 JPA 和 hibernate。我在批量执行时遇到了一些插入性能问题。到目前为止,我发现的修复是:

  1. 更改 Oracle 序列更新“ Increment by> 1,我给 50”
  2. 在 Java 实体中使用与allocationSizeOracle 相同的值Increment By

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

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

APC*_*APC 5

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

两者都不。INCREMENT BY 和 CACHE 之间没有关系。

INCREMENT BY 控制序列的单调方面。随着 INCREMENT BY 50,系列继续1, 51, 101, 151等等。

CACHE 控制在内存中保存多少序列号来为 NEXTVAL 请求提供服务。CACHE 编号越小,数据库必须越频繁地从其内部表中读取以获取下一个分配范围。所以在一个中等繁忙的系统中,我们希望最小化获取锁存器的数量,所以我们将 CACHE 设置为一个较高的数字,比如 1000。

人们痴迷于设置 CACHE 值,因为他们认为如果它太高,他们可能会“丢失”一些值并在他们的系列中出现差距。这极不可能发生,即使发生了,我们也不应该在意。序列是保证唯一值的来源,没有其他意义。


虽然,重新阅读您的问题后,我认为这不会对批量插入的性能产生任何影响。你为什么选择专注于序列分配?你有没有运行任何跟踪来发现瓶颈在哪里?你和你的 DBA 谈过了吗​​?