카테고리 없음
2. 스프링 배치의 이해: 데이터 50,000건 처리를 위한 Chunk 방식과 Page Size
kalkin
2024. 1. 12. 15:22
그러면 아래와 같을경우를 생각해 보자.
총 데이터가 50,000개
chunkSize가 1,000
데이터 베이스를 조회할때 pageSize 가 300일때는 어떻게 되는걸까?
성능 차이
- 데이터베이스 호출 빈도:
- Page Size가 300일 경우, Chunk Size인 1,000건의 데이터를 처리하기 위해 데이터베이스에 총 4번 호출이 발생합니다 (1,000 ÷ 300 = 3.33, 올림하여 4).
- 이는 Page Size가 Chunk Size와 같거나 큰 경우에 비해 더 많은 데이터베이스 I/O가 발생한다는 것을 의미합니다.
- 빈번한 데이터베이스 호출은 네트워크 오버헤드와 I/O 비용을 증가시킬 수 있으며, 이는 전체 배치 작업의 성능에 영향을 줄 수 있습니다.
- 메모리 사용량:
- Chunk Size에 비해 상대적으로 작은 Page Size를 사용하면, 한 번에 메모리에 적은 양의 데이터만 적재되므로 메모리 사용량은 최적화될 수 있습니다.
- 하지만 이것이 성능 향상에 항상 긍정적인 영향을 주는 것은 아닙니다. 처리 효율성과 메모리 사용 사이에서 균형을 찾는 것이 중요합니다.
처리 방식의 차이
- 읽기(Read) 단계:
- 첫 번째 데이터베이스 호출: 처음 300건의 데이터를 읽습니다.
- 두 번째 데이터베이스 호출: 다음 300건을 읽습니다.
- 세 번째 데이터베이스 호출: 그 다음 300건을 읽습니다.
- 네 번째 데이터베이스 호출: 마지막 100건을 읽습니다 (1,000건을 완성).
- 처리(Process) 및 쓰기(Write) 단계:
- 읽어온 데이터(각 호출에서의 300건 또는 마지막에 100건)는 처리 단계를 거치고, 이후 쓰기 단계에서 저장하거나 다음 단계로 전달됩니다.
- 이 과정은 Chunk Size인 1,000건이 완료될 때까지 반복됩니다.
결론
- 작은 Page Size는 데이터베이스 호출 빈도를 증가시키고, 이는 성능 저하의 원인이 될 수 있습니다.
- 반면, 메모리 사용량 관리에는 유리할 수 있으나, 전체적인 성능 향상을 위해서는 Page Size와 Chunk Size 사이의 균형이 중요합니다.
- 최적의 성능을 위해서는 배치 작업의 특성과 환경에 따라 이러한 값을 조정하고 테스트하는 것이 권장됩니다.
- 실제 개발에서는 chunkSize와 pageSize를 동일하게 세팅할 것을 권장합니다.