使用hibernate,当我尝试使用以下命令启用批插入时
<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。
我是不是错过了一个场景?
发布于 2012-08-18 02:35:35
事实证明,在这种情况下缺少的是:
<property name="order_inserts">true</property>参考: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更频繁(任何大于1的值基本上表示它成功地执行了批量插入)。
hibernate.jdbc.batch_versioned_data可能也很有用。
jdbc:mysql://localhost:3306/batch?rewriteBatchedStatements=true类型的连接字符串也可能以某种方式相关。
https://forum.hibernate.org/viewtopic.php?p=2374413,另请参阅Hibernate batch size confusion
发布于 2015-03-19 21:25:18
要为INSERT和UPDATE语句启用批处理,您需要设置以下所有Hibernate属性:
spring.jpa.properties.hibernate.jdbc.batch_size=30
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.order_updates=true如果可以使用SEQUENCE,那么就不应该使用IDENTITY实体标识符生成器,因为它禁用了批处理获取。
如果您不能使用SEQUENCE (例如MySQL),那么尝试使用单独的机制来启用批量插入(例如JDBC),而不是使用TABLE生成器,因为它不具有伸缩性并且具有高性能损失。
https://stackoverflow.com/questions/12011343
复制相似问题