JVM/JPA

트랜잭션을 지원하는 쓰기 지연

kyoulho 2023. 7. 4. 20:54

JDBC가 제공하는 SQL 배치 기능을 사용하면 쓰기 SQL을 모아서 데이터베이스에 한번에 보낼 수 있다.
hibernate.jdbc.batch_size 속성의 값을 50으로 주면 최대 50건씩 모아서 SQL 배치를 실행한다. 하지만 SQL 배치는 같은 SQL일 때만 유효하다. 중간에 다른 처리가 들어가면 SQL 배치를 다시 시작한다.
JPA의 쓰기 지연 기능은 데이터베이스 락이 걸리는 시간을 최소화해서 동시에 더 많은 트랜잭션을 처리할 수 있는 장점이 있다.

em.persist(new Member()); //1
em.persist(new Member()); //2
em.persist(new Member()); //3
em.persist(new Member()); //4
em.persist(new Child());  // SQL 실행
em.persist(new Member()); //1
em.persist(new Member()); //2

총 3번 SQL 배치 실행
IDENTITY 식별자 생성 전략은 엔티티를 데이터베이스 저장해야 식별자를 구할 수 있으므로 em.persist()를 호출하는 즉시 INSERT SQL이 데이터베이스에 전달된다. 따라서 쓰기 지연을 활용한 성능 최적화를 할 수 없다.

'JVM > JPA' 카테고리의 다른 글

2차 캐시  (0) 2023.07.05
낙관적 락과 비관적 락  (0) 2023.07.05
SQL 쿼리 힌트 사용  (0) 2023.07.04
읽기 전용 쿼리의 성능 최적화  (0) 2023.07.04
N+1 문제  (0) 2023.07.04