devnoong.log
article thumbnail
728x90

 

SprinbBatch 프로그램을 구현하면서 성능 속도를 고려하지 않을 수 없었다.

 

초기에 cursorItemReader가 성능이 좋다고해서 커서로 구현할까 고민했었지만,

구글링과 여러 블로그 글들을 종합해 본결과 대용량 데이터 처리에는 적합하지 않음을 알게 되었다.

 

 

 

그로인해 아래의 여러가지 방법으로 속도를 개선처리하고자 했다.

 

로컬에서 프로그램을 수행하므로, dev나 운영환경에 비해서는 시간이 소요될 수 밖에 없다.

시간 감소 폭만 확인 하는 용도로만 참고하면 된다.

 

MyBatisPagingItemReader 개선 수행

 

row_num을 이용해 no-offset으로 코드 재 구현

select * from(
	select  @rownum:=@rownum+1 row_num ,
    from table_nm
    where (@rownum:=0)=0 
)
where row_num > #{_skiprows}
limit 0, #{_pagesize}

 

속도 개선 진행 전 - >  34034건 처리시  소요시간 662856 

 

 

속도 개선 진행 후 - >   34034건 처리시  소요시간 604540 

 

속도개선 후 ,  58316 정도가 감소되었음을 확인 할 수 있었다.

 

추가로 94594 건을 로컬에서 수행하다 8만건쯤 OOME 발생돼서 종료되었다....ㅎ (계속 기다렸는데 시간 아깝 ,,,,, ㅠ)

 

그래서 dev환경에서 소요시간을 측정을 진행했다.

 

속도 개선 진행 전 - >   34034 건 처리시  소요시간 161830

약 3분 17초 소요

속도 개선 진행 후  - >   34034 건 처리시  소요시간  64921

약 1분 37초 소요

 

속도 개선 후 , 개발 환경에서는  3분 17초 소요 ->   1분 37초 소요로 시간이 개선되었다

 

 

속도 개선 진행 전 - >   94594건 처리시  소요시간 180638

약 3분 32초가 소요

 

속도 개선 진행 후  - >   94594 건 처리시  소요시간  197193

약 3분 50초 소요

 

응??? 건수를 올리니까 속도가 더 오래걸렸다....?

 

MyBatisBatchItemWriter 개선 수행

 

728x90