쓰기 지연과 JDBC 배치
- JDBC 배치 기능
INSERT
시 마다 DB와 통신이 발생함.
- 네트워크 IO 비용이 있기에.. 성능에 부정적인 영향을 미친다.
- JDBC 배치로 SQL 명령을 한 번에 DB로 보내 성능을 극대화 할 수 있다.
- JPA 플러시 기능 활용
- JPA 는 내부적으로 플러시 기능으로 DB와 통신함.
- JPA 는 JDBC 의 SQL 배치 기능을 보다 효과적으로 사용이 가능하다.
하이버네이트의 설정
hibernate.jdbc.batch_size
속성을 50 으로 설정하면- 최대 50건의 데이터를 모아서 SQL 배치를 수행함
쓰기 지연의 작동 방식
- 같은 종류의 SQL 명령을 모아서 배치 처리함.
em.persist(new Member()); // 1
em.persist(new Member()); // 2
em.persist(new Member()); // 3
em.persist(new Member()); // 4
em.persist(new Child()); // 5, 다른 연산
em.persist(new Member()); // 6
em.persist(new Member()); // 7
- 1 2 3 4 번은 하나의 배치로 쿼리 발사
- 5번 단독
- 6 7 하나의 배치 쿼리로 발사
주의
- IDENTITY 식별자 생성 전략 ( MYSQL 의 경우? )
persist()
호출시 즉시INSERT
SQL 이 수행된다고 함.
- DB 저장해 식별자를 구할 수 있기 때문…
- 해당 경우에는 쓰기 지연을 통한 성능 최적화는 불가능
- MYSQL은 SEQUENCE를 지원하지 않기에…
- TABLE 전략을 써야한다는데,, 솔직히 사용하는 경우가 있나 싶다.
그냥 JDBC 를 사용해서 배치 쿼리를 최적화하는게 맞지않나 싶다
Uploaded by N2T
'자바 > JPA' 카테고리의 다른 글
[JPA] 트랜잭션 (0) | 2023.11.19 |
---|---|
[JPA] 읽기 전용 쿼리 최적화(미완성) (0) | 2023.11.19 |
[JPA] 쓰기 지연의 장점 등 (0) | 2023.11.19 |
[JPA] 예외 처리 및 JPA 표준 예외 정리 (0) | 2023.11.19 |
[JPA] 트랜잭션 롤백 시 주의 해야할 점! (0) | 2023.11.19 |