我们有一个弹簧批处理作业,我们试图处理大约1000万条记录。现在在单线程中这样做会很慢,因为我们必须匹配SLA。spring批处理分区性能问题
为了提高性能,我们开发了一个POC,其中主步骤创建分区,其中每个分区表示一个唯一的产品ID。这可以从500到4500之间的任何范围。在POC中,我们有500个这样的独特产品ID。现在每个分区都有一个prod id,并在其上进行操作。所有这些端到端工作正常。
我们注意到,主步骤需要5分钟以上才能将分区信息发送到步骤执行请求。我的意思是说,主步骤生成分区和正在执行的第1个分区的步骤之间有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 =?; 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,从BATCH_STEP_EXECUTION其中JOB_EXECUTION_ID = VERSION?按STEP_EXECUTION_ID排序;
谢谢迈克尔。我们使用spring批处理3.0.3并查看它执行的日志组3选择。请参阅我选择的原始评论。看着插入,它只发生一次保存上下文信息 – user509755
另外我还有一个关于工作回购的问题。看你的工作回购配置是什么意思? – user509755
我注意到的是,上述3个选择(原始评论)正在执行每个parition和3个选择合并需要1秒。所以如果我们有500分的话那么它就是这3分选的500倍。这是大部分时间 – user509755