这更像是一个快速解释用于从存储作业和步骤信息的Spring Batch表生成ID的序列的请求。
我在DB2 for 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。
任何提示或解释都是一个很好的学习机会。
答案 0 :(得分:0)
出于性能原因,默认情况下,Linux Unix Windows的Db2将预先分配20个序列号,并将它们保存在内存中以便更快地访问。
如果您不想要缓存行为并且可以容忍在没有缓存的情况下分配的开销,那么您可以在定义序列时使用NO CACHE选项。但要注意,如果没有缓存,Db2必须对从序列中分配的每个数字执行同步事务日志写入,这在高频插入情况下通常是不可取的。
请记住显式激活数据库(即不依赖于自动激活),因为当数据库停用时,未使用的预分配缓存序列号将被丢弃。
示例没有缓存语法:
CREATE SEQUENCE AR_REPORT_ETL_STEP_EXECUTION_SEQ
AS BIGINT MAXVALUE 9223372036854775807 NO CACHE NO CYCLE;
您可以在documentation。
中阅读更多详情