14

使用休眠,当我尝试启用批量插入时

  <property name="jdbc.batch_size">50</property>

我得到以下输出:

 [...] cfg.SettingsFactory INFO  - JDBC batch updates for versioned data: disabled
 [...] cfg.SettingsFactory INFO  - Order SQL inserts for batching: disabled

然后这个:

 [...] jdbc.AbstractBatcher DEBUG - Executing batch size: 1

batch size: 1基本上从来没有。

我错过了一个设置吗?

4

2 回答 2

15

要为 INSERT 和 UPDATE 语句启用批处理,您需要设置以下所有 Hibernate 属性:

spring.jpa.properties.hibernate.jdbc.batch_size=30
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.order_updates=true

如果您可以使用 a SEQUENCE,那么您不应该使用IDENTITY实体标识符生成器,​​因为它会禁用批量获取。

如果您不能使用SEQUENCE(例如 MySQL),那么请尝试使用单独的机制来启用批量插入(例如 JDBC),而不是使用TABLE无法扩展且具有高性能损失的生成器。

于 2015-03-19T13:25:17.860 回答
6

原来在这种情况下缺少的是:

<property name="order_inserts">true</property>

参考:https://forum.hibernate.org/viewtopic.php?p=2374413https://stackoverflow.com/a/5240930/32453 或者可能是 hibernate.order_inserts。

现在我明白了

 [...] cfg.SettingsFactory INFO  - Order SQL inserts for batching: enabled
 ...
 [...] Executing batch size: 2

更频繁(任何大于 1 基本上意味着它成功地进行批量插入)。

hibernate.jdbc.batch_versioned_data 也可能有用。

jdbc:mysql://localhost:3306/batch?rewriteBatchedStatements=true 类型的连接字符串也可能以某种方式相关。

https://forum.hibernate.org/viewtopic.php?p=2374413并查看 Hibernate 批量大小混淆

于 2012-08-17T18:35:34.530 回答