Hibernate 성능 최적화: Fetch Size, Batch Size, @BatchSize 비교

파워소동·2025년 3월 3일
0

JPA

목록 보기
5/5

흥미로워라

1. hibernate.jdbc.batch_size

  • 배치 작업(INSERT, UPDATE, DELETE)에 대해 한 번에 처리할 수 있는 쿼리의 수를 설정.
  • 쓰기 성능을 향상시킴.

예시:

spring:
  jpa:
    properties:
      hibernate:
        jdbc:
          batch_size: 50  # 한 번에 50개의 INSERT, UPDATE 작업을 묶어서 처리
  • 장점: 대량의 데이터 쓰기 작업을 효율적으로 처리하여 성능 향상.
  • 단점: 데이터베이스에 부하를 줄 수 있기 때문에, 적절한 배치 크기를 설정해야 함.

2. hibernate.jdbc.fetch_size

  • 쿼리 결과를 가져올 때 한 번에 가져오는 레코드 수를 설정.
  • 메모리 사용을 절약하고 네트워크 성능을 최적화
  • 쿼리 실행 시 커넥션당 가져올 데이터의 양
  • 쿼리 결과가 클 경우, 모든 데이터를 한 번에 로드하는 대신 설정한 fetch_size만큼 나눠서 로드해서 메모리 사용량을 줄이고, 쿼리 성능을 개선할 수 있음.

예시:

spring:
  jpa:
    properties:
      hibernate:
        jdbc:
          fetch_size: 100  # 한 번에 100개의 레코드를 가져옴
  • 장점: 대량의 데이터를 효율적으로 로드하고 메모리 소모를 줄임.
  • 단점: 읽는 데이터의 양을 최적화하지만, 조회 자체는 여전히 느릴 수 있음.

3. @BatchSize

  • 연관된 엔티티 컬렉션을 로드할 때 한 번에 가져올 엔티티의 수를 설정.
  • N+1 문제를 해결하고 성능을 최적화하려는 경우 사용. 연관된 엔티티를 효율적으로 로딩할 수 있음.
  • 컬렉션 로딩 시, N+1 문제를 방지하고 여러 엔티티를 한 번에 로딩하도록 할 수 있음.

예시:

@Entity
public class GrandEntity {

    @OneToMany(mappedBy = "grand")
    @BatchSize(size = 20)  // 한 번에 20개의 'parents' 엔티티를 가져옴
    private List<ParentsEntity> parents = new ArrayList<>();
}
  • 장점: 연관된 엔티티를 효율적으로 로딩하고 N+1 문제를 해결.
  • 단점: 너무 큰 배치 크기를 설정하면 메모리나 성능에 영향을 줄 수 있음.

결론

옵션목적주요 용도설정 위치효과
hibernate.jdbc.fetch_size쿼리 결과의 배치 크기를 설정대용량 조회 성능 최적화application.yml대용량 조회 시, 한 번에 가져오는 레코드 수를 줄여 메모리 사용을 최적화함.
hibernate.jdbc.batch_size쓰기 작업(INSERT, UPDATE)의 배치 크기 설정대량 삽입/수정 성능 최적화application.yml여러 개의 쿼리를 묶어서 한 번에 처리하여 데이터베이스에 대한 부하를 줄임.
@BatchSize연관된 엔티티의 배치 크기 설정연관된 컬렉션 로딩 시 성능 최적화, N+1 문제 해결엔티티 클래스의 연관 관계 필드에 설정연관된 엔티티를 효율적으로 로딩하여 N+1 문제를 해결하고 성능을 향상시킴.
profile
이것저것 모음집

0개의 댓글