簡體   English   中英

如何在休眠中啟用批量插入?

[英]How do you enable batch inserts in hibernate?

使用休眠,當我嘗試啟用批量插入時

  <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基本上。

我缺少設置嗎?

要為 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

如果您可以使用SEQUENCE ,則不應使用IDENTITY實體標識符生成器,​​因為它會禁用批量提取。

如果您不能使用SEQUENCE (例如 MySQL),那么請嘗試使用單獨的機制來啟用批量插入(例如 JDBC),而不是使用無法擴展且具有高性能損失的TABLE生成器。

事實證明,在這種情況下缺少的是:

<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 批量大小混淆

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM