【发布时间】:2016-05-23 20:27:41
【问题描述】:
我们有一个春季批处理作业,我们试图处理大约 1000 万条记录。现在在单线程中执行此操作将非常慢,因为我们必须匹配 SLA。
为了提高性能,我们开发了一种 POC,其中主步骤是创建分区,其中每个分区代表一个唯一的产品 ID。这可以在 500 到 4500 之间。在 POC 中,我们有 500 个这样的唯一产品 ID。现在,每个分区都被赋予了一个 prod id 并对其进行步骤操作。所有这些端到端工作正常。
我们注意到,主步骤将分区信息发送到步骤执行请求需要超过 5 分钟。我的意思是,主步骤生成分区和为第一个分区执行的步骤之间存在超过 5 分钟的差异。
什么可能导致这种缓慢?这 5 分钟内 Spring Batch 框架做了什么?
这是在这 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, IDENTIFYING from BATCH_JOB_EXECUTION_PARAMS where JOB_EXECUTION_ID = ?; SELECT 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 from BATCH_STEP_EXECUTION where JOB_EXECUTION_ID = ?按 STEP_EXECUTION_ID 排序;
【问题讨论】:
标签: spring-batch