我们需要在运行性能测试之前为300万个实体播种应用程序。 应通过应用程序加载300万个实体,以模拟3年的实际数据。
我们一次插入1-5000个实体。在开始时响应时间非常好。但过了一会儿,它们呈指数衰减。
我们在groovy脚本中使用URL来启动每一轮插入。
1)每100次插入后清理GORM:
def session = sessionFactory.currentSession
session.flush()
session.clear()
DomainClassGrailsPlugin.PROPERTY_INSTANCE_MAP.get().clear()
(老Ted Naleid技巧:http://naleid.com/blog/2009/10/01/batch-import-performance-with-grails-and-mysql)
2)我们使用GPars进行并行插入:
GParsPool.withPool {
(0..<1000).eachParallel {
def entity = new Entity(...)
insertionService.insert(entity)
}
}
我真的希望有人对如何解决问题有个好主意。
答案 0 :(得分:0)
暂停会让我觉得JVM正在进行垃圾收集。您是否使用过VisualVM等分析器来查看垃圾收集的时间?通常,这将是了解JVM中应用程序发生情况的最佳方法。
此外,将数据直接加载到数据库中,而不是使用您的应用程序,如果您正在尝试种子&#34;应用程序。当然是表现明智。
(根据评论添加为答案)