3

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 秒;

  1. 如果我将 FetchBatchSize 设置为 100,则时间成本会显着降低到不到 2 秒,这很好,但如果我尝试只获取 50 条记录,这比 FetchBatchSize 100 少,则需要更长的时间(在我的测试中为 50 秒)这是不可接受的。

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

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

任何评论表示赞赏。谢谢!

4

1 回答 1

0

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

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

于 2011-07-15T23:32:59.950 回答