如何确定 OpenJPA 中 FetchBatchSize 的数量?

Posted

技术标签:

【中文标题】如何确定 OpenJPA 中 FetchBatchSize 的数量?【英文标题】:How to determine the number for FetchBatchSize in OpenJPA? 【发布时间】:2011-04-24 12:25:50 【问题描述】:

OpenJPA 在 FetchPlan 中提供了一些参数。 (http://openjpa.apache.org/builds/1.2.0/apidocs/org/apache/openjpa/persistence/FetchPlan.html) 我被困在其中之一,FetchBatchSize。 希望有人可以分享他们的经验。

这是场景,假设我要从数据库中选择多达 1000 条记录(MS-SQL) 1. 如果我将 FetchBatchSize 设置为默认值 -1,则返回 1000 条记录需要大约 20 秒;

    1234563将花费更长的时间(在我的测试中为 50 秒),这是不可接受的。

    好的,所以,我猜如果 FetchBatchSize 超过用户想要的数量,则需要更多时间。我可以根据用户设置的计数在运行时更改 FetchBatchSize。你想要 1000,我将 FetchBatchSize 设置为 1000,你想要 100,我将其设置为 50,但是如果用户只需要几条记录怎么办?我也将 FetchBatchSize 设置为 2?

所以我的问题是,当 maxResultCount 是可变的时,如何选择合适的 FetchBatchSize?如果 openJPA 文档中有任何 DEFAULT 值(例如 20)适用于大多数场景?或者建议在运行时更改。

感谢任何评论。谢谢!

【问题讨论】:

[off topic] 谁能确认这个问题是否适用于 hibernate 和 toplink ? 我不熟悉hibernate或toplink,但我想可能是一样的。 (说到 FetchBatchSize) 【参考方案1】:

这实际上是一个 MS-SQL 调优问题,而不是 OpenJPA 问题——FetchBatchSize 值被传递给驱动程序。

在运行时根据最大结果计数参数动态设置值当然没有错。此外,假设您在指定大于限制子句的数字时遇到的延迟不是由于一些模糊的配置,在 OpenJPA SQLServerDictionary 中添加一些内容以在最大结果值时限制批处理大小会很有趣存在。出现在 OpenJPA 邮件列表中可能是件好事。

【讨论】:

以上是关于如何确定 OpenJPA 中 FetchBatchSize 的数量?的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 OpenJPA SQL 日志记录?

OpenJPA:JPQL 与本机查询

OpenJPA/MySQL:在 where 子句中使用同一张表时修改表

DDL 生成和常规 persistence.xml 设置 (OpenJPA)

在 OpenJPA 中使用 inet postgres 数据类型

当实体发生变化时,OpenJPA 对 db 模式做了啥?