OpenJPA在FetchPlan中提供了一些参数。(http://openjpa.apache.org/builds/1.2.0/apidocs/org/apache/openjpa/persistence/FetchPlan.html)我被困在其中一个FetchBatchSize中。希望有人能分享他们的经验。
这是一个场景,假设我要从数据库(MS-SQL)中选择最多1000条记录1. 如果我让FetchBatchSize保持默认值-1,它将花费大约20秒来返回1000条记录;
-
如果我设置FetchBatchSize为100,时间成本减少,显着,不到2秒,这很好,但如果我试图只获得50条记录,这小于FetchBatchSize 100,它将花费更长的时间(50秒在我的测试中),这是不可接受的。
-
好的,所以,我猜如果FetchBatchSize超过用户想要的数量,它将花费更多的时间。我可以在运行时改变FetchBatchSize,根据用户设置的计数。你想要1000,我把FetchBatchSize设为1000,你想要100,我把它设为50,但如果用户只需要一些记录呢?我也设置FetchBatchSize为2?
所以我的问题是,如何选择一个适当的FetchBatchSize时maxResultCount是可变的?如果有任何默认值,如20,在openJPA文档中,将适用于大多数场景?或者建议在运行时修改。
任何评论都是赞赏的。谢谢!
这实际上是一个MS-SQL调优问题,而不是OpenJPA问题——FetchBatchSize值被传递给驱动程序。
在运行时根据最大结果计数参数动态设置值当然没有错。此外,假设您在指定大于limit子句的数字时遇到的延迟不是由于一些模糊的配置,那么在存在最大结果值时向OpenJPA SQLServerDictionary添加一些内容以限制批处理大小将是很有趣的。在OpenJPA邮件列表中提出可能是件好事。