【问题标题】:Spring Batch Meta Data Schema SequencesSpring Batch 元数据模式序列
【发布时间】:2018-06-01 12:36:39
【问题描述】:

这更多的是要求快速解释用于从存储作业和步骤信息的 Spring Batch 表中生成 ID 的序列。

我在 DB2 中为 Spring Boot + Batch 应用程序运行了以下序列:

CREATE SEQUENCE AR_REPORT_ETL_STEP_EXECUTION_SEQ AS BIGINT MAXVALUE 9223372036854775807 NO CYCLE;
CREATE SEQUENCE AR_REPORT_ETL_JOB_EXECUTION_SEQ AS BIGINT MAXVALUE 9223372036854775807 NO CYCLE;
CREATE SEQUENCE AR_REPORT_ETL_JOB_SEQ AS BIGINT MAXVALUE 9223372036854775807 NO CYCLE;

当 Spring Batch 作业运行时,每个新记录上的每个 ID 字段都会增加 20。虽然这不是一个主要问题,但它仍然有点令人困惑。

我删除了这些序列,并用INCREMENT BY 1 再次添加了它们。现在每第二条记录递增 1,另一条记录递增 20。

任何提示或解释都是一个很好的学习机会。

【问题讨论】:

    标签: sql spring spring-boot db2 spring-batch


    【解决方案1】:

    出于性能原因,默认情况下,Db2 for Linux Unix Windows 将预先分配 20 个序列的数字并将它们保存在内存中以便更快地访问。

    如果您不想要这种缓存行为并且可以容忍不缓存的分配开销,那么您可以在定义序列时使用 NO CACHE 选项。但请注意,如果没有缓存,Db2 必须为从序列中分配的每个数字执行同步事务日志写入,这在高频插入情况下通常是不可取的。

    记得显式激活数据库(即不依赖于自动激活),因为当数据库停用时,未使用的预分配缓存序列号会被丢弃。

    无缓存语法示例:

        CREATE SEQUENCE AR_REPORT_ETL_STEP_EXECUTION_SEQ 
    AS BIGINT MAXVALUE 9223372036854775807 NO CACHE NO CYCLE;
    

    您可以在documentation阅读更多详细信息。

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 2015-02-15
      • 2020-03-02
      • 1970-01-01
      • 2020-02-23
      • 2021-11-12
      相关资源
      最近更新 更多