减少对Oracle的调用次数以检索新序列

时间:2018-03-01 12:39:00

标签: java oracle performance sequence

在我们的app中,每当我们创建一个新实体时,我们都会调用Oracle来获取实体id的下一个序列。 我们正在使用OracleSequenceMaxValueIncrementer。

但是我们希望减少对oracle的调用次数。

我正在考虑增加序列表上的“Incremented By”值。现在它是1。 因此,如果我们将增加到10,我们可以每10次调用oracle,而不是每次我们需要一个新的序列。 我希望使用OracleSequenceMaxValueIncrementer在代码中获取“Incremented by”值,但它不支持它,因此需要执行常规查询。

这是一个常见的解决方案吗,我猜常见问题?

其他信息: 我们用于获取下一个序列的服务被所有实体使用,其中对于每个人,存在可以具有不同“递增”的不同序列表。这就是为什么我写的我将首先查询数据库以检索特定实体的“递增”。

1 个答案:

答案 0 :(得分:1)

  • 为什么要减少对应用程序的调用次数?面对任何争论?

您可以缓存序列,这将保留内存中每个会话的序列号,用于避免争用。

ALTER SEQUENCE customers_seq 
   CACHE 5; 

<强> CACHE 指定数据库预分配的序列值的数量,并保留在内存中以便更快地访问。该整数值可以有28个或更少的数字。此参数的最小值为2.对于循环的序列,此值必须小于循环中的值的数量。您不能缓存超过给定循环序列号的值。因此,CACHE允许的最大值必须小于由以下公式确定的值:

<强>参考: https://docs.oracle.com/database/121/SQLRF/statements_6017.htm#SQLRF01314