이번에 서비스 단에서 DB에 접근하여 데이터를 조회할 때 DB에서 데이터를 가져오는 시간이 너무 오래 걸렸다.
대략 가져와야 하는 데이터의 건수는 약 20만건이었고, 따로 인덱스는 생성하지 않았다.
개발환경은 아래와 같다.
개발환경
Eclipse 2022-12
MyBatis
Spring 4.3.25
jdk 1.8
약 20만건의 데이터를 조회하는데 걸렸던 시간은 3분 32초 가량 걸렸다.
데이터를 조회하는데만 최대한 많이 봐줘서 1분만 넘어가도 속이 터지는데, 3분이라는 시간은 너무나도 길었다.
그래서, 이것저것 찾아본 게 MyBatis에서 fetchSize의 기본값은 10이다.
즉, 약 20만건의 데이터를 조회할 때 DB 조회를 하는 횟수는 20,000번을 조회해 온다.
그래서, 조회를 해올 때 시간을 줄이기 위해서는 MyBatis에 fetchSize를 높게 주는 것이다.
원래 MyBatis의 fetchSize는 설정을 하지 않을 경우 10으로 설정이 되어 있는데, 이것을 1000 ~ 2000 사이로 주는 것이다.
아래와 같이, xml 파일에서 select 태그 안에 옵션으로 fetchSize="2000"으로 설정했다.
<select id="TEST_LIST" parameterType="Map" resultType="DataMap" fetchSize="2000">
SELECT DESC
FROM TEST
</select>
위의 쿼리로 테스트를 진행했다.
1. fetchSize 1000으로 설정
fetchSize를 1000으로 설정했을 때
15:50:34.494
15:50:46.006
11초 가량 걸렸다.
2. fetchSize 2000으로 설정
fetchSize를 2000으로 설정했을 때
15:53:11.424
15:53:20.609
9초 가량 걸렸다.
그러니까 대용량 데이터를 가져올 때는 MyBatis에서 fetchSize를 설정하면 된다.
최근댓글