我正在尝试调整我的应用程序,遇到一些关于批量提取和批量选择的博客,并将我的理解如下所示。
hibernate.jdbc.fetch_size
- 用于指定选择查询中要提取的行数。hibernate.jdbc.batch_size
- 用于指定在单个数据库命中中执行的插入或更新的数量。 请告诉我我的理解是否正确?上述参数的最佳值是什么..
答案 0 :(得分:17)
这两个选项都在JDBC驱动程序中设置属性。在第一种情况下,hibernate.jdbc.fetch_size
设置JDBC驱动程序中语句的提取大小,即select语句中有多行结果时获取的行数。
在第二种情况下,hibernate.jdbc.batch_size
确定一次发送到数据库以执行的更新(插入,更新和删除)的数量。此参数是进行批量插入所必需的,但必须与有序的inserts参数和JDBC驱动程序将插入重写为批量插入语句的功能相结合。
请参阅this link
答案 1 :(得分:6)
您的假设是正确的。
hibernate.jdbc.fetch_size
Hibernate配置属性用于为Hibernate在当前运行的持久化上下文中使用的每个语句设置JDBC Statement#setFetchSize
属性。
通常,您不需要设置此属性,因为默认值很好,尤其是对于在单个数据库往返中获取整个ResultSet
的MySQL和PostgreSQL。因为Hibernate遍历整个ResultSet
,所以最好在单次拍摄中获取所有行,而不是使用多次往返。
仅限Oracle,您可能需要设置它,因为默认提取大小仅为10.有关详细信息,请查看this article。
hibernate.jdbc.batch_size
属性用于批处理多个INSERT<将语句一起更新和DELETE,以便可以在单个数据库调用中设置它们。
如果你设置了这个属性,你最好还是选择这两个:
hibernate.order_inserts
至true
hibernate.order_updates
至true
有关详细信息,请查看以下两篇文章:
答案 2 :(得分:0)
答案 3 :(得分:0)
您的理解似乎非常正确。我会把你推荐给关于Hibernate的JBOSS文档,下一章是Batch processing。这个就在tweaking performance上。
这是一个好的,易于阅读的来源。它提供了一些关于最佳值的建议,但正如CodeChimp所提到的,调优最好是逐个进行的,并且是一个可重复的过程。