Я пытаюсь вставить 3,6 миллиона записей в MySQL 5.1, используя JPA в Glassfish 3.0.1. Я делаю это одним вызовом бизнес-метода EJB, поэтому я полагаю, что это делается в одной транзакции SQL. Я сумасшедший? : -)
Поскольку используется один и тот же экземпляр EntityManager, бизнес-метод должен вызывать em.flush () и em.clear () каждые 3000 записей, иначе em будет засоряться. (Я пробовал разные значения, мне кажется, это оптимально).
Это прекрасно работает на моей платформе для тестирования и разработки (WinXP на четырехъядерном процессоре). Каждое 100000 em.persist () занимает 24-28 с, а вся операция занимает 15 минут.
Но в нашей производственной коробке с Ubuntu 10 на виртуализированной коробке x86_64 каждый 100000 em.persist () становится все медленнее. Первый занимает 40 с, затем 70, 77, 89, 121, 130, 126, 163, 201, 247 с. Приложение сервера заканчивается полным зависанием.
Mysql:
5.1.47-сообщество MySQL Community Server (GPL) (Windows),
5.1.41-3ubuntu12.6 (Ubuntu)
Я не могу понять, почему (почти) одно и то же программное обеспечение ведет себя так принципиально иначе. Есть идеи?