gpt4 book ai didi

hibernate - 为什么要刷新的对象数量应该等于 hibernate.jdbc.batch_size?

转载 作者:行者123 更新时间:2023-12-02 22:49:06 24 4
gpt4 key购买 nike

hibernate documentation表示在进行批量插入/更新时,当对象数量等于 jdbc 批量大小(hibernate.jdbc.batch_size)时,应刷新并清除 session 。我的问题是为什么该数字应该等于 hibernate.jdbc.batch_size 。有性能提示吗?
编辑: 例如,我已在 hibernate.cfg 文件中将 hibernate.jdbc.batch_size 设置为 30。然后正如文档所说,当对象计数等于 30 时应该刷新 session 。为什么当对象计数为 20 或 40 时不应该刷新 session ?

最佳答案

JDBC 批处理包括执行以下操作:

  • 将插入语句添加到批处理中,并保存在内存中
  • 当您达到批处理中记录的给定数量的插入语句时(或者当不再执行插入语句时),在单次网络往返中将此批处理命令发送到数据库,以便数据库实际上执行这些插入语句。

刷新 session 包括告诉 Hibernate:将内存中保存的所有内容插入数据库。

因此,如果您的批量大小设置为 30,并且每刷新 5 个实体,Hibernate 将执行大量小批量的 5 个插入语句,而不是执行少 6 倍的批量 30 个语句。由于您已确定 30 是最佳批量大小,因此刷新每 5 个实体不会使用此最佳大小。

相反,如果您刷新每 35 个实体,那么 Hibernate 将执行一批 30 个插入,然后执行一批 5 个,然后一批 30 个,然后一批 5 个,依此类推。再一次,您没有使用最佳批量大小。

如果每刷新 30 个实体,那么 hibernate 将仅执行最佳大小的批处理,如果实体总数不是 30 的倍数,则最后一个批处理除外。

关于hibernate - 为什么要刷新的对象数量应该等于 hibernate.jdbc.batch_size?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25417977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com