Spring boot 2升级 - spring boot data jpa saveAll()非常慢

时间:2018-04-26 13:53:22

标签: java mysql hibernate spring-boot

我使用mysql和hibernate以及spring boot data jpa(spring-boot-starter-data-jpa和mysql-connector-java)。最近我将我的spring boot项目从1.5升级到2.0。用于保存可迭代的spring数据CrudRepository的API已从save()更改为saveAll()。我在代码中进行了更改并且它可以正常工作,但速度很慢:

  • 插入10个项目 - > 2倍慢(49ms - > 95ms)
  • 插入100件商品 - >慢6倍(132ms - > 840ms)
  • 插入1000件商品 - >慢10倍(792ms - > 8028ms)
  • 插入10000项 - >慢15倍(4912ms - > 73542ms)
  • 插入100000项 - >慢22倍(32042ms - > 712702ms)

我已经用空表测试了两个弹簧版本的插页。 mysql服务器版本没有改变:5.7.21 - MySQL社区服务器(GPL)

我需要每天插入~2M项目,因此这种减速效果非常明显。这是我的配置:

spring.datasource.url = jdbc:mysql://localhost:3306/service?useSSL=false&rewriteBatchedStatements=true
spring.datasource.username = service
spring.datasource.password = service
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.hikari.maximum-pool-size=5

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.jdbc.batch_size=50
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.order_updates=true
spring.jpa.properties.hibernate.jdbc.batch_versioned_data=true

是否有人知道更新后发生了什么变化以及如何再次加速?

1 个答案:

答案 0 :(得分:0)

在application.properties中设置spring.jpa.properties.hibernate.generate_statistics = true

hibernate:
  generate_statistics: true

https://www.baeldung.com/spring-data-jpa-batch-inserts