본문 바로가기
정리/DB

MyBatis FETCH SIZE에 대해

by Hudini30 2022. 8. 17.

올해 DBMS를 ORACLE로 변경하면서 있었던 생소한 상황이 기억나 정리를 해보려고 합니다.

 

전환 후 모니터링을 하고 있던 상황이었고, 다행히 무사히 전환을 완료하나 했습니다.

 

하지만 그럴리가 없지... 특정 페이지의 로딩 속도가 너무 느리다는 제보를 받았고, 확인을 해보니 확실히 해당 페이지를 로딩하는 부분이 너무 느리다는 것을 알 수 있었습니다. 모니터링 툴을 통해 특정 쿼리 실행 응답이 너무 느린 증상이 있다는 것을 알게 되었는데, 그 부분에서만 10초가 넘는 시간이 걸리고 있었습니다.

문제는 툴에서 해당 쿼리를 조회해 보면 1초 이내로 조회가 가능 했었죠. 

결과적으로 아래와 같이 Mybatis 해당 쿼리에 fetchSize를 높임으로서 해결했습니다.

 

<select id="selectBlog" resultType="Blog" fetchSize="1000">
        select * from Blog where id = #{id}
</select>

그래서 FetchSize 뭐고 왜 문제가 되었는데?

Fetch라는 기능은 DB에서 가져오는 데이터의 양을 조절하여, 속도를 개선시키기 위한 기능이라고 합니다.

 

Oracle로 바꾸면서 문제가 되었던 이유는 Oracle JDBC의 Default Fetch Size가 10이었기 때문이죠.

결국 db 결과 조회가 1천건인 경우 10개의 로우씩 읽어와서 100번 db에 요청하는 셈이었다는 겁니다.

 

찾아보니 이전 Cubrid JDBC에서는 따로 fetchSize는 지원하지 않고 16k 단위로 prefetch 해주고 있어서 문제가 없었던 것으로 보입니다. 

 

 

참고

http://wiki.gurubee.net/pages/viewpage.action?pageId=3901810 

https://performeister.tistory.com/12

https://docs.oracle.com/cd/E18283_01/java.112/e16548/resltset.htm

'정리 > DB' 카테고리의 다른 글

JPA(3) - 값타입  (0) 2022.04.15
JPA (2) - 기능 정리  (0) 2022.04.11
JPA (1) - JPA? ORM?  (0) 2022.03.16

댓글