How do you enable batch inserts in hibernate?
With hibernate, when I attempt to enable batch inserts with
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?
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.
Turns out what was missing in this case was:
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.