인프런 커뮤니티 질문&답변

도토리님의 프로필 이미지

작성한 질문수

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

영속성 컨텍스트 2

쓰기 지연 관련 질문

23.05.03 11:01 작성

·

336

·

수정됨

0

상황: hibernate.jdbc.batch_size 옵션을 사용하지 않고, em.persist()를 4번 하였다.

쓰기 지연 SQL 저장소에 insert 쿼리가 4개 존재하고, commit 시점에 DB에 insert 쿼리 4개가 전달된다는 것은 알겠습니다. 그런데, insert 쿼리가 DB에 전달될 때, 4번의 네트워크가 반복되는 것인가요?
(https://www.inflearn.com/questions/41344/batch-size%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%A7%88%EB%AC%B8%EC%9D%B4-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4 이 질문을 보고 질문드립니다)

그리고 4번의 네트워크가 반복된다는 것이 'DB와 커넥션 맺고 insert 쿼리 1개 전달하고 커넥션을 종료'하는 과정이 4번 반복된다는 뜻인가요? 그렇다면 em.persist()할 때마다 insert 쿼리를 보내는 것과 무슨 차이가 있는 것이죠...?

 

답변 1

2

David님의 프로필 이미지

2023. 05. 06. 21:08

안녕하세요. 도토리님, 공식 서포터즈 David입니다.

flush가 발생하면 쓰기 지연 SQL 저장소에 있는 쿼리를 한 번의 네트워크 통신으로 보냅니다.

참고하신 질문 글 처럼 batch size를 2로 지정한다면 4개의 insert쿼리가 2개씩 나뉘어져 2번의 네트워크 통신이 발생하게 됩니다.

감사합니다.

알닉님의 프로필 이미지

2023. 05. 14. 00:00

기본키 생성전략이 IDENTITY전략이여도 말씀하신것처럼 4개의 인서트 쿼리가 2개씩 나눠서 2번 네트워크를 타게 되는건가요?

David님의 프로필 이미지

2023. 05. 15. 08:34

올려주신 글에 포함된 질문 글의 답변에 나와있듯, 해당 최적화는 IDENTITY 전략에서는 사용할 수 없습니다.