java - Spring boot 2 升级 - spring boot data jpa saveAll() very slow

标签 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 Data CrudRepository API 已从 save() 更改为 saveAll()。我对代码进行了更改,它可以工作,但速度很慢:

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

我已经用一个空表测试了两个 spring 版本的插入。 mysql 服务器版本没有变化:5.7.21 - MySQL Community Server (GPL)

我每天需要插入大约 200 万个项目,所以这种减速非常显着。这是我的配置:

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

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

最佳答案

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

hibernate:
  generate_statistics: true

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

关于java - Spring boot 2 升级 - spring boot data jpa saveAll() very slow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50044823/

相关文章:

java - 如何在未安装 MySQL 的计算机上运行使用 MySQL DB 的 Java 应用程序?

java - 如何从其他数组中获取相同的索引值?

java - Weka Kernel Estimator 类中的带宽是如何计算的?

mysql - 在 WHERE 子句中确定 CaseSensitive

java - HSQ Hibernate 更新问题

java - Spring hibernate CRUD : ORA-00923: FROM keyword not found where expected

java - 如何使用 Java 将原始数据发送到打印机

MySQL 触发器 - 插入前的 INET_ATON

mysql - 将 Rails 的默认数据库更改为 MySQL

java - 扩展基类和两个具有@Id 注释的类是否会导致实体映射中的重复列?