본문 바로가기
FullStack/21. Java

ResultSet의 setFetchSize 에 따른 성능

by nakanara 2023. 9. 5.
반응형

Pixabay - Gerd Altmann 님의 이미지

 

배경

쿼리에서 많은 행을 받으려면 여러 번의 네트워크 왕복이 필요합니다. 왕복 횟수는 결과 집합의 총 행 수와 각 데이터베이스 이동에서 반환되는 행 수인 인출 크기의 함수입니다. 따라서 동일한 쿼리 결과에 대해 가져오기 크기를 조정하여 왕복 횟수에 영향을 줄 수 있습니다. 클라이언트와 데이터베이스가 동일한 네트워크에 공존하는 환경에서는 일반적으로 네트워크 왕복 횟수가 성능을 결정하는 요소가 아니기 때문에 가져오기 크기의 영향을 고려할 필요가 없는 경우가 많습니다.

서로 다른 클라우드 간에 분할 스택 아키텍처를 사용하는 경우와 같이 약간의 대기 시간이 있는 환경에서는 네트워크 왕복을 고려하는 것이 중요합니다. 쿼리에 많은 네트워크 왕복이 필요한 경우 왕복마다 대기 시간이 약간 늘어나도 성능에 큰 영향을 미칠 수 있습니다. 따라서 이런 상황에서는 왕복 횟수를 최대한 줄이는 것이 중요합니다.

FetchSize 조정

결과 집합에 10,000개의 행이 있고 가져오기 크기가 10인 경우 데이터를 가져오기 위해 1,000번의 네트워크 호출이 필요합니다. 가져오기 크기를 200으로 변경하면 50개의 네트워크 호출만 필요합니다. 이러한 차이는 대기 시간이 짧은 환경에서는 무시할 수 있습니다. 그러나 약간의 대기 시간이 있는 환경에서는 특히 많은 행을 반환하는 쿼리를 처리할 때 가져오기 크기를 올바르게 조정해야 합니다.

가져오기 크기를 늘리면 클라이언트 애플리케이션은 한 번의 가져오기로 반환된 모든 행을 저장하기 위해 더 많은 메모리를 사용합니다. 다음 예와 같이 사용하는 도구 및 연결에 따라 다양한 방식으로 가져오기 크기에 영향을 미칠 수 있습니다.

테스트 케이스 결과

런던 지역에서 ODSA를 사용하여 이 테스트 사례를 실행했습니다. VM.Standard2.2 구성에서 기본 데이터베이스를 사용하고 Oracle Linux 8.5를 사용하여 Azure Standard DS1 v2 VM(가상 머신)에서 연결했습니다. 테스트를 세 번 실행하고 결과를 평균화했습니다. 다른 지역과 다른 모양에서는 약간 다른 결과를 얻을 수 있습니다. 그러나 전체 평균은 동일하게 유지됩니다.

Fetch 사이즈에 따른 결과

행 프리페치 설정
Azure 클라이언트의 평균 쿼리 시간(초)
1(기본값)
340
20
190
50
80
100
56
500
16
1,000
11

 

결론

멀티클라우드 환경으로 이동하고 큰 결과 집합을 반환하는 쿼리를 사용하는 경우 쿼리의 가져오기 크기를 조정하여 성능을 최적화할 수 있습니다.

반응형

'FullStack > 21. Java' 카테고리의 다른 글

Azure Active Directory SSO - 로그인 코드(2)  (0) 2023.09.29
Azure Active Directory SSO - 연동 준비(1)  (0) 2023.09.29
TimeZone 출력(GMT, UTC)  (0) 2023.07.18
Java 메일 읽기  (0) 2023.05.16
[Spring] RequestContextHolder  (0) 2023.02.15