Как включить пакетные вставки в спящем режиме?
В спящем режиме, когда я пытаюсь включить пакетную вставку с
<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
в принципе.
Я пропускаю настройку?
2 ответа
Оказывается, чего не хватало в этом случае:
<property name="order_inserts">true</property>
ref: https://forum.hibernate.org/viewtopic.php?p=2374413, /questions/44183089/jpahibernate-obemnaya-paketnaya-vstavka/44183128#44183128 или, возможно, 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 = строки подключения истинного типа также могут быть как-то связаны.
https://forum.hibernate.org/viewtopic.php?p=2374413 а также см. путаницу размера пакета Hibernate
Чтобы включить пакетную обработку для операторов INSERT и UPDATE, необходимо настроить все следующие свойства Hibernate:
<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>
Если вы можете использовать ПОСЛЕДОВАТЕЛЬНОСТЬ, то вам не следует использовать генераторы IDENTITY, так как это отключает пакетную выборку.
Если вы не можете использовать SEQUENCE (например, MySQL), попробуйте использовать отдельный механизм для включения пакетной вставки (например, jOOQ) вместо использования генератора TABLE, который не масштабируется и имеет высокую производительность.