inflearn logo
강의

Course

Instructor

Spring Batch

Cursor 방식 ItemReader 관련 질문입니다.

669

bk8540

3 asked

0

안녕하세요.

JdbcCursorItemReader 관련하여 질문하고 싶습니다.

Cursor 기반 처리에서 모든 결과를 메모리에 할당하여 메모리 사용량이 많아진다는 단점이 있다고 하셨는데 여기서 '모든 결과' 를 메모리에 할당하는 부분이  fetchSize 크기 만큼 메모리에 올린다는 것을 말씀하시는 건지 궁굼합니다.

혹은 커서기반으로 처리했을 때 어떤 부분에서 메모리 사용량이 많아지는지 궁굼합니다.

 

spring-boot spring-batch

Answer 3

1

leaven

Cursor 방식으로 데이터를 읽어서 처리하는 경우 읽을 데이터가 존재하지 않을 때까지 DB 커넥션을 유지한채로 계속 데이터를 FetchSize 만큼 가지고 와서 한 건씩 read 하게 됩니다.

그렇기 때문에 스트리밍 방식으로 계속 데이터를 메모리에 가지고 와서 처리하기 때문에 한번의 쿼리 결과로 조회된 데이터를 모두 처리할 때까지 커넥션이 유지되고 메모리에 적재되고 건건히 처리되는 방식입니다.

물론  GC 가 적절한 시점에 메모리 정리를 하겠지만 커넥션이 이루어지고 닫히기 까지 하나의 트랜잭션 안에서 모든 데이터가 처리되기 때문에 메모리에 계속 할당한다고 볼 수 있습니다.

참고로 Cursor 방식은 내부적으로 스냅샷 방식으로 동작하기 때문에 메모리 사용량이 많아지기도 합니다. 

대신 페이징 방식은 커넥션이 이루어지고 쿼리를 실행한 후 페이징 크기 만큼 데이터를 처리하고 커넥션이 닫힙니다. 그리고 다시 커넥션이 이루어지고 쿼리를 새로 실행하는 방식으로 이루지기 때문에 페이징 크기만큼 생성된 트랜잭션 안에서 메모리 처리가 이루어진다고 볼 수 있습니다.

다만 개발 환경 및 운영 상황에 따라 위의 기준도 유동적으로 바뀔 수 있기 때문에 여러 테스트를 통해서 적절한 방식을 결정해야 합니다.

0

leaven

모든 결과를 메모리에 계속 누적한다는 의미보다는 스트리밍 방식으로 하나의 커넥선 안에서 데이터를 계속 읽고 처리한다는 개념으로 이해하시면 될 것 같습니다

0

bk8540

감사합니다!

즉 커넥션이 유지되는 동안의 모든 데이터가 메모리에 쌓인다고 이해하면 되나요??

 

스프링 배치 버전 질문

0

120

1

소스코드가 어디에 있나요?

0

95

2

트랜잭션 예외

0

90

1

질문이 있습니다.

0

128

2

ChunkListener 에서 beforeChunk 의 실행 시점 관련 질문

0

124

2

여러 JOB 설정하는법

0

149

2

강의 자료 다른 방법 있을까요?

0

154

1

JobExecution과 JobExecutionContext와의 관계

0

185

2

특정 job만 실행

1

248

1

Batch 성능 질문

0

152

1

ItemReaderAdapter 종료

0

79

1

[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader

0

178

2

Spring Batch 배포 질문

0

245

2

spring batch 버전

0

235

2

retry count 관련 질문

0

170

2

StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.

0

329

2

jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)

0

233

2

Multithread step과 AsyncItemProcessor

0

202

2

job 재실행

0

250

2

bean 생명주기 문제 도와주세요(@Scope("step"), @Autowired)

0

182

1

Multi-threaded-step과 Partitioning 차이 확인

0

173

2

jdbcCursorReader, jdbcPagingReader 질문

0

143

1

step muti-thread 질문

0

108

1

itemSteam open update close 질문

0

110

1