카테고리 없음

2. 스프링 배치의 이해: 데이터 50,000건 처리를 위한 Chunk 방식과 Page Size

kalkin 2024. 1. 12. 15:22

그러면 아래와 같을경우를 생각해 보자.

총 데이터가 50,000개 

chunkSize가 1,000

데이터 베이스를 조회할때 pageSize 가 300일때는 어떻게 되는걸까?

 

성능 차이

  1. 데이터베이스 호출 빈도:
    • Page Size가 300일 경우, Chunk Size인 1,000건의 데이터를 처리하기 위해 데이터베이스에 총 4번 호출이 발생합니다 (1,000 ÷ 300 = 3.33, 올림하여 4).
    • 이는 Page Size가 Chunk Size와 같거나 큰 경우에 비해 더 많은 데이터베이스 I/O가 발생한다는 것을 의미합니다.
    • 빈번한 데이터베이스 호출은 네트워크 오버헤드와 I/O 비용을 증가시킬 수 있으며, 이는 전체 배치 작업의 성능에 영향을 줄 수 있습니다.
  2. 메모리 사용량:
    • Chunk Size에 비해 상대적으로 작은 Page Size를 사용하면, 한 번에 메모리에 적은 양의 데이터만 적재되므로 메모리 사용량은 최적화될 수 있습니다.
    • 하지만 이것이 성능 향상에 항상 긍정적인 영향을 주는 것은 아닙니다. 처리 효율성과 메모리 사용 사이에서 균형을 찾는 것이 중요합니다.

처리 방식의 차이

  1. 읽기(Read) 단계:
    • 첫 번째 데이터베이스 호출: 처음 300건의 데이터를 읽습니다.
    • 두 번째 데이터베이스 호출: 다음 300건을 읽습니다.
    • 세 번째 데이터베이스 호출: 그 다음 300건을 읽습니다.
    • 네 번째 데이터베이스 호출: 마지막 100건을 읽습니다 (1,000건을 완성).
  2. 처리(Process) 및 쓰기(Write) 단계:
    • 읽어온 데이터(각 호출에서의 300건 또는 마지막에 100건)는 처리 단계를 거치고, 이후 쓰기 단계에서 저장하거나 다음 단계로 전달됩니다.
    • 이 과정은 Chunk Size인 1,000건이 완료될 때까지 반복됩니다.

결론

  • 작은 Page Size는 데이터베이스 호출 빈도를 증가시키고, 이는 성능 저하의 원인이 될 수 있습니다.
  • 반면, 메모리 사용량 관리에는 유리할 수 있으나, 전체적인 성능 향상을 위해서는 Page Size와 Chunk Size 사이의 균형이 중요합니다.
  • 최적의 성능을 위해서는 배치 작업의 특성과 환경에 따라 이러한 값을 조정하고 테스트하는 것이 권장됩니다.
  • 실제 개발에서는 chunkSize와 pageSize를 동일하게 세팅할 것을 권장합니다.