rog*_*ack 11 java database performance hibernate batch-processing
使用hibernate,当我尝试启用批量插入时
<property name="jdbc.batch_size">50</property>
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
[...] cfg.SettingsFactory INFO - JDBC batch updates for versioned data: disabled
[...] cfg.SettingsFactory INFO - Order SQL inserts for batching: disabled
Run Code Online (Sandbox Code Playgroud)
然后这个:
[...] jdbc.AbstractBatcher DEBUG - Executing batch size: 1
Run Code Online (Sandbox Code Playgroud)
从来没有超过batch size: 1基本.
我错过了一个设置吗?
Vla*_*cea 12
要为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>
Run Code Online (Sandbox Code Playgroud)
如果您可以使用SEQUENCE,则不应使用IDENTITY生成器,因为它会禁用批量提取.
如果您不能使用SEQUENCE(例如MySQL),那么尝试使用单独的机制来启用批量插入(例如jOOQ),而不是使用不能扩展且具有高性能损失的TABLE生成器.
原来在这个案例中缺少的是:
<property name="order_inserts">true</property>
Run Code Online (Sandbox Code Playgroud)
参考:https://forum.hibernate.org/viewtopic.php ? p = 2374413,https://stackoverflow.com/a/5240930/32453 或者可能是hibernate.order_inserts.
现在我明白了
[...] cfg.SettingsFactory INFO - Order SQL inserts for batching: enabled
...
[...] Executing batch size: 2
Run Code Online (Sandbox Code Playgroud)
更频繁(任何大于1的东西基本上意味着它成功地进行批量插入).
hibernate.jdbc.batch_versioned_data也可能有用.
jdbc:mysql:// localhost:3306/batch?rewriteBatchedStatements = true类型连接字符串也可能以某种方式相关.
https://forum.hibernate.org/viewtopic.php?p=2374413还看到 Hibernate批量大小混乱
| 归档时间: |
|
| 查看次数: |
28013 次 |
| 最近记录: |