Search code examples
javadatabaseperformancehibernatebatch-processing

How do you enable batch inserts in hibernate?


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?


Solution

  • 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