How do you enable batch inserts in hibernate?

狂风中的少年 提交于 2019-11-30 06:21:43

问题


With hibernate, when I attempt to enable batch inserts with

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

I get the following output:

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

And then this:

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

never more than batch size: 1 basically.

Am I missing a setting?


回答1:


To enable batching for both INSERT and UPDATE statements, you need to sett all the following Hibernate properties:

<property name="hibernate.jdbc.batch_size">30</property>
<property name="hibernate.order_inserts">true</property>
<property name="hibernate.order_updates">true</property>
<property name="hibernate.jdbc.batch_versioned_data">true</property>

If you can use a SEQUENCE, then you should not use IDENTITY generators, since it disables batch fetching.

If you cannot use a SEQUENCE (e.g. MySQL), then try using a separate mechanism to enable batch inserts (e.g. jOOQ) instead of using the TABLE generator which does not scale and has a high-performance penalty.




回答2:


Turns out what was missing in this case was:

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

ref: https://forum.hibernate.org/viewtopic.php?p=2374413, https://stackoverflow.com/a/5240930/32453 Or possibly hibernate.order_inserts.

Now I see

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

Much more frequently (anything greater than 1 basically means it's successfully doing batch inserts).

hibernate.jdbc.batch_versioned_data may also be useful.

jdbc:mysql://localhost:3306/batch?rewriteBatchedStatements=true type connection strings might also be related somehow.

https://forum.hibernate.org/viewtopic.php?p=2374413 and also see Hibernate batch size confusion



来源:https://stackoverflow.com/questions/12011343/how-do-you-enable-batch-inserts-in-hibernate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!