spring batch meta table data delete

2023. 5. 16. 15:14데이터베이스/oracle

728x90
반응형

배치를 돌리다보면 spring batch meta table 에 데이터가 쌓인다.

 

많은 job을 돌릴수록 데이터가 많이 쌓여 있어 삭제 가 필요 할수 있다.

 

그때 사용할수 있는 delete 쿼리로 순서대로 삭제 하는 쿼리 가 있는데

 

1
2
3
4
5
6
7
8
9
10
11
12
 
DELETE FROM BATCH_STEP_EXECUTION_CONTEXT WHERE STEP_EXECUTION_ID IN ( SELECT STEP_EXECUTION_ID FROM BATCH_STEP_EXECUTION WHERE START_TIME < '20230224' );
 
DELETE FROM BATCH_STEP_EXECUTION WHERE START_TIME < '20230224';
 
DELETE FROM BATCH_JOB_EXECUTION_CONTEXT WHERE JOB_EXECUTION_ID IN ( SELECT JOB_EXECUTION_ID FROM BATCH_JOB_EXECUTION WHERE CREATE_TIME < '20230224');
 
DELETE FROM BATCH_JOB_EXECUTION_PARAMS WHERE JOB_EXECUTION_ID IN ( SELECT JOB_EXECUTION_ID FROM BATCH_JOB_EXECUTION WHERE CREATE_TIME < '20230224');
 
DELETE FROM BATCH_JOB_EXECUTION WHERE CREATE_TIME < '20230224';
 
DELETE FROM BATCH_JOB_INSTANCE A WHERE NOT EXISTS ( SELECT JOB_INSTANCE_ID FROM BATCH_JOB_EXECUTION B WHERE A.JOB_INSTANCE_ID = B.JOB_INSTANCE_ID );
cs

이런식이다

배치로 삭제 돌리다보면 많은 데이터가 있을때 BATCH_JOB_EXECUTION ,BATCH_JOB_INSTANCE  

이 두 테이블의 삭제 속도가 많이 느려진다.

 

그럴때 

 

1
2
3
4
5
6
CREATE INDEX BATCH_STEP_EXECUTION_IDX ON BATCH_STEP_EXECUTION (JOB_EXECUTION_ID);
CREATE INDEX BATCH_JOB_EXECUTION_PARAMS_IDX ON BATCH_JOB_EXECUTION_PARAMS (JOB_EXECUTION_ID);
CREATE INDEX BATCH_JOB_EXECUTION_IDX ON BATCH_JOB_EXECUTION (JOB_INSTANCE_ID);
 
-- 이테이블은 생성시 index 걸리는데 안걸려있으면 
CREATE INDEX BATCH_JOB_EXECUTION_CONTEXT_IDX ON BATCH_JOB_EXECUTION_CONTEXT (JOB_EXECUTION_ID);
cs

이런식으로 index 생성하면 속도 향상 된다.

728x90