【发布时间】:2010-11-22 10:53:36
【问题描述】:
我尝试在 Glassfish 3.0.1 中使用 JPA 在 MySQL 5.1 中插入 360 万条记录。我在一个单一的 EJB 业务方法调用中完成它,所以我相信它是在一个单一的 SQL 事务中完成的。我疯了吗? :-)
由于使用的是同一个EntityManager实例,业务方法必须每3000条记录调用一次em.flush()和em.clear(),否则em会阻塞。 (我尝试了各种值,这对我来说似乎是最佳的)。
这在我的测试和开发平台(四核机器上的 WinXP)上运行得非常好。每100000个em.persist()耗时24-28秒,整个操作耗时15分钟。
但是在我们的生产机器上,在虚拟化 x86_64 机器上使用 Ubuntu 10,每个 100000 em.persist() 会逐渐变慢。第一个需要 40 秒,然后是 70、77、89、121、130、126、163、201、247 秒。服务器应用程序最终完全挂起。
Mysql: 5.1.47-community MySQL 社区服务器 (GPL) (Windows), 5.1.41-3ubuntu12.6 (Ubuntu)
我不明白为什么(几乎)相同的软件会表现出如此根本的不同。有什么想法吗?
【问题讨论】: