iBatis에서 6만건을 조회해서 ArrayList 로 메모리에 담아 엑셀로 다운로드 작업하는데 1분 20초가 걸렸다.
운영 DB에는 100만건이 있는데, 중간에 뻗어버린다.
구글링해본 결과,
- fetchSize
부분범위처리라고 해서 ArraySize를 조정해서 Fetch Call을 감소해서 대량으로 데이터를 내려받는 것. 블록 I/O도 감소. 로컬환경에서는 6만건 처리가 확연히 빨라졌지만, 개발 서버 WAS에서 실행했을 때 OOM 발생.
뭔가 잘못설정하긴 한 것 같다. (fetchSize 100과 600 차이는 나지 않았다)
- rowHandler
https://ibatis.apache.org/docs/java/user/com/ibatis/sqlmap/client/event/RowHandler.html
ibatis에서 제공하는 row 마다 처리해주는 이벤트 핸들러(myBatis에넌 ResultHandler로 변경)
queryWithRowHandler 메소드를 사용해서 많은 로우를 한번에 메모리에 로드하지 않고 한 로우씩 효율적으로 로드해줌.
sqlMap.queryWithRowHandler("getUserInfo", null, new RowHandler())
- batch
'web' 카테고리의 다른 글
ElasticSearch Index 질의(w/ python) (0) | 2022.06.07 |
---|---|
Spring Cloud with Aws Secrets Manager (0) | 2020.02.03 |
ThreadPoolTaskExecutor RejectedException 발생 (0) | 2017.05.31 |
댓글