hibernate.jdbc.fetch_size和hibernate.jdbc.batch_size有什么区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate.jdbc.fetch_size和hibernate.jdbc.batch_size有什么区别?相关的知识,希望对你有一定的参考价值。
我正在尝试调整我的应用程序,遇到了一些关于批量提取和批量选择的博客,并将我的理解如下。
hibernate.jdbc.fetch_size
- 用于指定选择查询中要提取的行数。hibernate.jdbc.batch_size
- 用于指定在单个数据库命中中执行的插入或更新的数量。
请告诉我我的理解是否正确?以上参数的最佳值是多少?
这两个选项都在JDBC驱动程序中设置属性。在第一种情况下,hibernate.jdbc.fetch_size
在JDBC驱动程序中设置语句的提取大小,即select语句上有多行结果时获取的行数。
在第二种情况下,hibernate.jdbc.batch_size
确定一次发送到数据库以供执行的更新(插入,更新和删除)的数量。此参数是进行批量插入所必需的,但必须与有序的inserts参数和JDBC驱动程序将插入重写为批量插入语句的功能相结合。
你的假设是正确的。
hibernate.jdbc.fetch_size
hibernate.jdbc.fetch_size
Hibernate配置属性用于为Hibernate在当前运行的持久性上下文中使用的每个语句设置JDBC Statement#setFetchSize
属性。
通常,您不需要设置此属性,因为默认值很好,特别是对于mysql和PostgreSQL,它在单个数据库往返中获取整个ResultSet
。因为Hibernate遍历整个ResultSet
,所以最好在单次拍摄中获取所有行,而不是使用多次往返。
仅限Oracle,您可能需要设置它,因为默认的提取大小只有10.有关更多详细信息,请查看this article。
hibernate.jdbc.batch_size
hibernate.jdbc.batch_size
属性用于将多个INSERT <UPDATE和DELETE语句一起批处理,以便可以在单个数据库调用中设置它们。
如果你设置了这个属性,你最好还是选择这两个:
hibernate.order_inserts
到true
hibernate.order_updates
到true
有关详细信息,请查看以下两篇文章:
- How to batch INSERT and UPDATE statements with Hibernate
- How to batch DELETE statements with Hibernate
当批量大小用于Hibernate批处理时,获取大小确实是Statement.setFetchSize()
。两个配置参数都解释为here。对于hibernate批处理,请参阅here
你的理解似乎很正确。我会把你推荐给关于Hibernate的JBOSS文档,下一章是关于Batch processing的。这一个在tweaking performance。
这是一个好的,易于阅读的来源。它提供了一些关于最佳值的建议,但正如CodeChimp所提到的,调优最好是逐个进行,并且是一个可重复的过程。
以上是关于hibernate.jdbc.fetch_size和hibernate.jdbc.batch_size有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章
hibernate.jdbc.fetch_size和hibernate.jdbc.batch_size有什么区别?
hibernate的速度问题--hibernate.jdbc.fetch_size和 hibernate.jdbc.batch_size