hibernate.jdbc.fetch_size和hibernate.jdbc.batch_size有什么区别?

Bha*_*r R 14 java orm spring hibernate jdbc

我正在尝试调整我的应用程序,遇到了一些关于批量提取和批量选择的博客,并将我的理解如下.

  • hibernate.jdbc.fetch_size - 用于指定选择查询中要提取的行数.
  • hibernate.jdbc.batch_size - 用于指定在单个数据库命中中执行的插入或更新的数量.

请告诉我我的理解是否正确?以上参数的最佳值是多少?

Tre*_*ing 18

这两个选项都在JDBC驱动程序中设置属性.在第一种情况下,hibernate.jdbc.fetch_size在JDBC驱动程序中设置语句的提取大小,即select语句上有多行结果时获取的行数.

在第二种情况下,hibernate.jdbc.batch_size确定一次发送到数据库以执行的更新(插入,更新和删除)的数量.此参数是批量插入所必需的,但必须与有序的inserts参数和JDBC驱动程序将插入重写为批处理插入语句的功能相结合.

看到这个链接


Vla*_*cea 10

您的假设是正确的。

hibernate.jdbc.fetch_size

hibernate.jdbc.fetch_sizeHibernate配置属性用于设置JDBC Statement#setFetchSize属性,Hibernate对当前正在运行的持久化上下文中使用的每个语句。

通常,您无需将此属性设置为默认值就可以了,特别是对于MySQL和PostgreSQL,它们可以ResultSet在一次数据库往返中获取整个属性。由于Hibernate遍历整个ResultSet,所以最好一次拍摄所有行,而不要使用多次往返。

仅对于Oracle,您可能需要设置它,因为默认访存大小仅为10。有关更多详细信息,请参阅本文

hibernate.jdbc.batch_size

hibernate.jdbc.batch_size属性用于将多个INSERT <UPDATE和DELETE语句批处理在一起,以便可以在单个数据库调用中设置它们。

如果设置此属性,则最好同时设置这两个:

  • hibernate.order_insertstrue
  • hibernate.order_updatestrue

有关更多详细信息,请查看以下两篇文章:

  • _“因为 Hibernate 遍历整个 ResultSet,所以最好在一次拍摄中获取所有行,而不是使用多次往返。”_ 不一定正确。它将需要更多内存,并且在第一行可用之前需要更长的时间。根据 JDBC 驱动程序的确切提取行为,分块提取可能会执行得更好并为结果集内部消耗更少的内存。 (2认同)