2012-04-13 11 views
2

を減少パフォーマンスを永続:は次第に考える

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(); 

ログから徐々に減少し、パフォーマンスを示しています@Stateless EJB、JTA MySQLデータソースと私はサイクルに固執しようとしている約5000エンティティのリストのメソッド15ms最大180msエンティティごとの節約時間。私はMySQLのサーバー設定がこのタスクの必要性をはるかに超えていると信じています.CPUとI/O操作のわずかな増加を示しています。各アップデートの後にフラッシングEntityManagerは効果がありません。

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

答えて

3

スローダウンは、永続コンテキスト(つまりセッションキャッシュ)内のエンティティの数が多いために発生します。 flushは、永続コンテキストからエンティティを削除しないため、ここでは役に立ちません。

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

関連する問題