如何确定OpenJPA中FetchBatchSize的数量?

时间:2011-04-24 12:25:50

标签: hibernate jdbc fetch openjpa toplink

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?

  3. 所以我的问题是,当maxResultCount是变量时,如何选择合适的FetchBatchSize?如果openJPA文档中有任何DEFAULT值,如20,适合大多数情况?或者建议在运行时更改它。

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

1 个答案:

答案 0 :(得分:0)

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

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