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