spring批处理分区性能问题

时间:2016-02-12 15:54:09

标签: spring-batch

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

为了提高性能,我们开发了一个POC,其中主要步骤是创建分区,其中每个分区代表一个唯一的产品ID。这可以在500到4500之间的任何地方。在POC中我们有500个这样独特的产品。现在为每个分区提供一个prod id并逐步处理它。所有这一端到底工作正常。

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

可能导致这种缓慢的原因是什么?春节批量框架在这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;

SELECT JOB_EXECUTION_ID,KEY_NAME,TYPE_CD,STRING_VAL,DATE_VAL,LONG_VAL,DOUBLE_VAL,从BATCH_JOB_EXECUTION_PARAMS中识别JOB_EXECUTION_ID =?; 从BATCH_STEP_EXECUTION中选择STEP_EXECUTION_ID,STEP_NAME,START_TIME,END_TIME,STATUS,COMMIT_COUNT,READ_COUNT,FILTER_COUNT,WRITE_COUNT,EXIT_CODE,EXIT_MESSAGE,READ_SKIP_COUNT,WRITE_SKIP_COUNT,PROCESS_SKIP_COUNT,ROLLBACK_COUNT,LAST_UPDATED,VERSION,其中JOB_EXECUTION_ID =?按STEP_EXECUTION_ID排序;

1 个答案:

答案 0 :(得分:0)

查看您的工作存储库的配置。一旦Partitioner为每个从属步骤创建了ExecutionContext,主服务器就会为每个从服务器创建一个StepExecution,然后再将其发送给要处理的从服务器。因此滞后可能是由于将所有这些StepExecution插入到您的作业存储库中。作为后续操作,请确保您使用的是最新版本。不久之前已经进行了优化(批量插入执行而不是逐个执行)。