2

与えられた: @StatelessEJB、JTA Mysql データ ソースのメソッド、およびサイクルで永続化しようとしている約 5000 のエンティティのリスト:

List<MyObj> objList = entityManager.createNamedQuery("Q1", MyObj.class).getResultList();
for(MyObj obj : objList) {
  long start_time = Calendar.getInstance().getTimeInMillis();
  entityManager.persist(obj);
  long end_time = Calendar.getInstance().getTimeInMillis();
  logger.info("Object saved in " + (end_time - start_time) + "ms");
}
entityManager.close();

ログは、エンティティごとの時間15msを節約するまで、パフォーマンスが徐々に低下していることを示しています。180msMysql サーバーの設定は、このタスクのニーズをはるかに超えていると思います。CPU と I/O 操作のわずかな増加を示しています。EntityManager各更新後のフラッシュは効果がありません。

このようなパフォーマンス低下の理由は何でしょうか? 私を正しい方向に向けてください。

4

1 に答える 1

3

パーシスタンス コンテキスト (つまり、セッション キャッシュ) 内の多数のエンティティが原因で速度が低下しているようです。flush永続化コンテキストからエンティティを削除しないため、ここでは役に立ちません。

単一の永続化コンテキストを使用して多数のエンティティを処理する必要がある場合は、コンテキストをclear()定期的にクリアすることをお勧めします。

于 2012-04-13T12:44:13.127 に答える