【问题标题】:Hibernate/Postgresql batch insert no longer working after upgradeHibernate/Postgresql 批量插入在升级后不再工作
【发布时间】:2022-11-10 01:01:24
【问题描述】:

我最近从 Spring Boot 2.4.x 升级到 2.6.x,其中包括将 Hibernate 从 5.1.2 更新到 5.6.3。更新后,INSERT 不再批处理(我可以判断,因为更新前的执行时间要快得多。)

我在 Hibernate 发行说明中没有看到任何相关的内容。

知道修复可能是什么吗?

我的配置:

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://myurl?reWriteBatchedInserts=true
 jpa:
   properties:
     hibernate:
       dialect:  org.hibernate.dialect.PostgreSQLDialect
       jdbc:
         batch_size: 50
         order_inserts: true

实体:

@Id
@GeneratedValue(generator = "sequence-generator")
@GenericGenerator(
        name = "sequence-generator",
        strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
        parameters = {
                @Parameter(name = "sequence_name", value = "my_id_seq"),
                @Parameter(name = "initial_value", value = "1"),
                @Parameter(name = "increment_size", value = "50")
        }
)
private Integer id;

Postgresql 驱动程序:

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.3.1</version>
    </dependency>

【问题讨论】:

  • 你怎么知道批处理模式不再起作用?您是否激活了统计信息的踪迹?
  • 我也遇到过同样的问题!有一天我说:是时候升级东西了。所以我去了 hibernate-core:5.6.7.Final 之后发现一切都变慢了。经过痛苦的分析,我意识到批处理停止工作(通过日志记录验证)。我还可以告诉你,中断发生在 5.6.1-Final 版本中,而 5.6.0-Final 版本运行良好。不知道为什么会这样

标签: postgresql spring-boot hibernate


【解决方案1】:

根据以下帖子,最近似乎已报告并修复了此问题:

https://discourse.hibernate.org/t/inserts-updates-no-longer-executed-as-jdbc-batch-statements/6337 https://hibernate.atlassian.net/browse/HHH-15281

但是,我通过简单地将hibernate-core 库降级回原始版本(在我的情况下为 5.3.9.Final)解决了这个问题。能够保持其他弹簧库版本不变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2018-01-22
    • 2018-09-16
    • 2012-12-13
    • 2016-01-03
    • 2021-07-15
    相关资源
    最近更新 更多