ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CS] batch Insert
    CS 2023. 1. 9. 11:21
    728x90

    Batch Insert

    여러 개의 SQL Statement를 하나의 구문으로 처리할 수 있다.

    Statement - Connection으로 연결된 객체에게, Query 작업을 실행하기 위한 객체이다

    여러 개의 구문을 여러 번 network 를 통해 보내는 것이 아니라 여러 개의 구문을 합쳐서 1개로 보내기에 성능 개선을 할 수 있습니다.

     

    다시 정리하면 spring data jpa 를 이용한다면 write-behind 를 통해 addBatch 와 같은 로직을 직접 작성할 필요 없고, batch_size 옵션을 준다면 batch 기능을 사용할 수 있습니다

     

    spring data jpa batch insert 사용하는 방법

    hibernate.jdbc.batch_size

    → 최대 몇 개까지 statements 를 batch 처리를 할 것인지, 즉 한 번에 데이터베이스로 보낼 최대 구문을 의미 ( 보통 100 ~ 1000 사이즈 선택하면 안정적이다 )

    spring:
      jpa:
        properties:
          hibernate:
            jdbc:
              batch_size: 1000
    					order_inserts: true
    	        order_updates: true
    

     

    추가적으로 사용하면 좋은 옵션 2가지

    1. hibernate.order_updates
    2. hibernate.order_inserts

    ⇒ 옵션을 적용한 후에는 같은 구문끼리 정렬을 해주어서 실행되는데, jdbc batch 기능을 통해서 일괄 처리할때 더욱 효율적이게 된다

     

    spring data jpa batch insert 동작 원리

    • 이 기능을 좀 더 상세히 설명하면, hibernate.jdbc.batch_side 옵션은 java 의 addBatch 를 이용하는 것입니다.
    • java 의 addBatch 는 하나의 statements 가 등록이 되면, 이것에 대한 copy 본을 만듭니다.
    • 뒤에 후속 구문들은 이 copy 된 구문을 계속해서 재사용합니다. 커밋이 되거나, 커서가 닫히거나 기타 등등일 때까지.
    • 그렇기에 batch insert 를 효율적으로 사용하기 위해 hibernate.order_updates, hibernate.order_inserts 와 같은 옵션이 필요합니다.

     

    spring data jpa batch insert 관련 주의사항

    • Entity Key 생성을 GenerationType.IDENTITY 로 하면 batch 옵션이 동작안합니다.
      • 왜냐하면 IDENTITY 옵션은 다른 2가지 옵션(SEQUENCE, TABLE)과는 다르게 즉시로딩만을 지원하기에 쿼리가 수행된 이후에 값을 얻을 수 있기에 한꺼번에 보내는 batch insert 옵션은 사용할 수 없습니다

     

    참고

    https://velog.io/@rainmaker007/spring-data-jpa-batch-insert-정리

    https://aricode.tistory.com/9

    'CS' 카테고리의 다른 글

    [CS] - CORS  (0) 2023.10.18
    [CS] OAuth2.0 간단한 이해  (0) 2023.03.10
    [CS] 동적 프록시  (0) 2023.01.07
    [CS] 직렬화  (0) 2023.01.07
    [CS] JPA 영속성 컨텍스트  (0) 2023.01.06
Designed by Tistory.