반응형
spring batch jdbc repository를 사용하면
로그를 기록하기 위한 테이블이 생성이 됩니다.
BATCH_STEP_EXECUTION_CONTEXT
BATCH_STEP_EXECUTION
BATCH_JOB_EXECUTION_CONTEXT
BATCH_JOB_EXECUTION_PARAMS
BATCH_JOB_EXECUTION
BATCH_JOB_INSTANCE
1분단위로 배치를 수행하는 JOB이 있다면, 각각의 테이블에 쌓이는 데이터의 양이 상당하다.
그래서, 데이터를 주기적으로 삭제 하기로 하였습니다.
-- 특정일자 이후 이력 삭제
DELETE FROM BATCH_STEP_EXECUTION_CONTEXT WHERE STEP_EXECUTION_ID IN ( SELECT STEP_EXECUTION_ID FROM BATCH_STEP_EXECUTION WHERE START_TIME < '20230201' );
DELETE FROM BATCH_STEP_EXECUTION WHERE START_TIME < '20230201';
DELETE FROM BATCH_JOB_EXECUTION_CONTEXT WHERE JOB_EXECUTION_ID in ( SELECT JOB_EXECUTION_ID FROM BATCH_JOB_EXECUTION where CREATE_TIME < '20230201');
DELETE FROM BATCH_JOB_EXECUTION_PARAMS WHERE JOB_EXECUTION_ID in ( SELECT JOB_EXECUTION_ID FROM BATCH_JOB_EXECUTION where CREATE_TIME < '20230201');
DELETE FROM BATCH_JOB_EXECUTION WHERE CREATE_TIME < '20230201';
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 );
하지만, 데이터가 많다면 "BATCH_JOB_EXECUTION" 을 삭제하는 과정에서 상당한 시간 ( Full Scan ) 이 소요되어 운영중인 시스템에서는 Lock 발생 우려 때문에 사용이 불가 하다.
이것은
"BATCH_JOB_EXECUTION" 의 "JOB_EXECUTION_ID" 가 Foreign Key로
"BATCH_STEP_EXECUTION, BATCH_JOB_EXECUTION_CONTEXT, BATCH_JOB_EXECUTION_PARAMS" 3개의 테이블에 설정이 되어 있기 때문에
"BATCH_JOB_EXECUTION" 데이터 삭제 시 정합성을 위해서 "BATCH_STEP_EXECUTION, BATCH_JOB_EXECUTION_CONTEXT, BATCH_JOB_EXECUTION_PARAMS" 3개의 테이블의 데이터를 Full Scan 하기 때문이다....
이 문제를 해결하기 위해서 Foreign Key로 설정된 테이블에 index를 추가하여서 삭제 속도를 향상 시켰다.
CREATE INDEX BATCH_STEP_EXECUTION_IDX1 ON BATCH_STEP_EXECUTION (JOB_EXECUTION_ID);
CREATE INDEX BATCH_JOB_EXECUTION_CONTEXT_IDX1 ON BATCH_JOB_EXECUTION_CONTEXT (JOB_EXECUTION_ID);
CREATE INDEX BATCH_JOB_EXECUTION_PARAMS_IDX1 ON BATCH_JOB_EXECUTION_PARAMS (JOB_EXECUTION_ID);
반응형
'개발하면서' 카테고리의 다른 글
Git Lab Upgrade The repository for this project does not exist. (1) | 2024.10.01 |
---|---|
Edge에서 IE 계속 사용하기 (0) | 2023.02.20 |
PostgreSQL 에서 나누기 (0) | 2023.02.01 |
PostgreSQL 에서 NVL .. COALESCE (0) | 2023.02.01 |
PostgreSQL 성능을 위한 설정 ( postgresql.conf 설정 ) (0) | 2023.01.29 |