Skip to content

Latest commit

 

History

History
31 lines (22 loc) · 1.51 KB

09.md

File metadata and controls

31 lines (22 loc) · 1.51 KB

MySQL - rewritebatchedstatements

Spring boot & JPA 기반 프로젝트를 수행하면서 배치 쿼리를 날릴 때 사용했던 속성이다.

이 속성을 사용함으로써 12개의 쿼리를 1개의 배치 INSERT 쿼리로 최적화한 경험이 있었다.

이 속성을 사용하면 MySQL이 내부에서 여러개의 INSERT or UPDATE 쿼리를 바로 DB에 반영하지 않고 쿼리들을 재배치하여 한 번에 쿼리를 날린다. 당연한 소리지만 같은 테이블에 INSERT나 UPDATE 쿼리를 날릴 경우에만 수행된다.

이 속성을 사용하려면 application.properties or application.yml에 다음과 같이 설정하면 된다.

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://${MYSQL_HOST}:3306/${MYSQL_DATABASE}?rewriteBatchedStatements=true

일단 이 속성은 MySQL 데이터베이스에 대한 JDBC 드라이버에서 사용 가능한 속성인데 다른 데이터베이스에는 적용을 안해봤으므로 다른 데이터베이스에는 적용이 되는지 모르겠다.

추가적으로 다음과 같이 배치 사이즈를 적용해줘야 Batch INSERT가 적용된다. 배치 사이즈를 정해주지 않는다면 동작하지 않으니 주의하도록 하자.

spring:
  jpa:
    properties:
      hibernate:
        jdbc:
          batch_size: 50

이렇게 정하면 배치 쿼리를 50개 까지 한번에 날릴 수 있다. 배치 쿼리를 담을 개수는 애플리케이션에 따라 적절하게 사용하도록 하자.