Spring batch spring批处理分区性能问题

Spring batch spring批处理分区性能问题,spring-batch,Spring Batch,我们有一个spring批处理工作,我们试图处理大约1000万条记录。现在在单线程中执行此操作将非常缓慢,因为我们必须匹配SLA 为了提高性能,我们开发了一个POC,其中主步骤是创建分区,其中每个分区代表一个唯一的产品id。这可以在500到4500之间的任意范围内。在POC中,我们有500个这样唯一的prod id。现在每个分区都被赋予了一个prod id,并对其进行了逐步操作。所有这些端到端的工作都很好 我们注意到,主步骤需要5分钟以上才能将分区信息发送到步骤执行请求。我的意思是,主步骤生成分区

我们有一个spring批处理工作,我们试图处理大约1000万条记录。现在在单线程中执行此操作将非常缓慢,因为我们必须匹配SLA

为了提高性能,我们开发了一个POC,其中主步骤是创建分区,其中每个分区代表一个唯一的产品id。这可以在500到4500之间的任意范围内。在POC中,我们有500个这样唯一的prod id。现在每个分区都被赋予了一个prod id,并对其进行了逐步操作。所有这些端到端的工作都很好

我们注意到,主步骤需要5分钟以上才能将分区信息发送到步骤执行请求。我的意思是,主步骤生成分区和第一个分区正在执行的步骤之间的差异超过5分钟

是什么导致了这种缓慢?spring批处理框架在这5分钟内做了什么

以下是在5分钟这么多时间内执行的3次选择

SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, CREATE_TIME, LAST_UPDATED, VERSION, JOB_CONFIGURATION_LOCATION from BATCH_JOB_EXECUTION where JOB_INSTANCE_ID = ? order by JOB_EXECUTION_ID desc;
选择JOB_EXECUTION_ID、KEY_NAME、TYPE_CD、STRING_VAL、DATE_VAL、LONG_VAL、DOUBLE_VAL,从BATCH_JOB_EXECUTION_参数中标识JOB_EXECUTION_ID=?;
选择步骤执行ID、步骤名称、开始时间、结束时间、状态、提交计数、读取计数、筛选计数、写入计数、退出代码、退出消息、读取跳过计数、写入跳过计数、处理跳过计数、回滚计数、上次更新、批处理步骤执行版本,其中作业执行ID=?按步骤执行的订单\u ID

查看作业存储库的配置。一旦
分区器
为每个从属步骤创建了
ExecutionContext
s,主程序将为每个步骤创建一个
StepExecution
,然后将其发送到要处理的从属步骤。因此,这种延迟可能是由于将所有这些
StepExecution
s插入作业存储库。作为跟进,请确保您使用的是最新版本。不久前,针对这一点进行了优化(批量插入执行,而不是逐个执行)。

谢谢Michael。我们正在使用SpringBatch3.0.3,并查看它执行的3组select的日志。请参阅我的原始评论更新与那些选择。看一下插入,保存上下文信息只发生了一次,我还有一个问题,job repo。你所说的查看作业回购配置是什么意思?我注意到的是,上面的3个选择(原始注释)正在为每个分区执行,这3个选择组合起来需要1秒。因此,如果我们有500个分区,那么它是执行这3个选择的500倍。这占用了大部分时间