-
[CS] batch InsertCS 2023. 1. 9. 11:21728x90
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가지
- hibernate.order_updates
- 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-정리
'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