inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

영속성 컨텍스트 2

batch_size에 대해서 질문이 있습니다.

489

iu

작성한 질문수 4

1

hibernate.jdbc.batch_size 를 2로 주고,

영속성 컨텍스트에 4개의 엔티티를 저장하면

결국에 트랜젝션 커밋시점에 4개의 쿼리가 나가는데..

여기서 궁금한게 있어서 질문을 드립니다.

1) 배치사이즈가 2이고 엔티티가 4개가 저장되어있다면, 배치 사이즈 크기에 해당하는 2개의 엔티티를 저장하는 쿼리가 실행될꺼 같았는데 아닌가요?

2) 테스트해본 결과 4개의 insert 쿼리가 내보내지는데 이 시점에 배치에 해당하는 최적화가 이루어지는건가요? 대용량으로 배치작업으로 어떠한 이점이 있는지 알고 싶어서 질문드립니다.

그리고 유익한 강의 매우 재밌게 잘 듣고 있습니다. 감사합니다.

JPA java

답변 1

3

김영한

안녕하세요. youngyun jo님^^ 좋은 질문입니다.

쿼리는 4번이 보이는 것이 맞습니다^^

최적화 부분을 눈으로 확인해보고 싶으면 하이버네이트 로그를 다음과 같이 디버그 레벨로 찍어보시면 됩니다.

logging.level.org.hibernate: debug

그러면 중간에 다음과 같은 로그들을 볼 수 있습니다.

2020-07-15 23:09:33.834 DEBUG 99097 --- [           main] o.h.e.jdbc.batch.internal.BatchingBatch  : Executing batch size: 2

한번에 2개의 배치로 쿼리가 실행되었다는 뜻이지요.

이 방법의 장점은 네트워크 반복 횟수가 줄어든다는 것에 있습니다.

상황에 따라 다르겠지만, 이 방법으로 실무에서 대용량 INSERT 작업에서 시간을 50% 정도 감축한 적이 있습니다.

참고: 식별자 모드가 IDENTITY인 경우는 DB에 값을 넣고 바로 PK를 꺼내야 하므로, 이 최적화를 사용할 수 없습니다.

감사합니다^^

실무 조언 관련 질문입니다.

0

41

1

H2데이터베이스 파일 생성

0

49

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

49

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

47

1

JPQL 메소드와 락

0

50

1

Delivery @OneToOne

0

57

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

87

2

UnsupportedOperationException 발생

0

82

3

H2 Database 연결이 안됩니다.

0

87

2

연관관계 매핑 질문드립니다.

0

80

2

h2데이터베이스 실행오류

0

104

2

persistence.xml

0

102

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

77

1

영속성 컨텍스트

0

62

1

JPA 프록시

0

89

1

Native Query와 MyBatis

0

63

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

82

1

임베디드 타입 예시 코드 관련 질문

0

111

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

90

3

인텔리제이 패키지 커서 단축키 질문

0

106

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

135

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

68

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1

데이터베이스가 초기화되는 것 같아요

1

175

2