2010-06-12 3 views
0

Hibernate (EhCache 사용)에서 2 차 레벨 캐시를 사용하여 성능 향상을 벤치마킹하고 있지만 성능을 향상시키지 못했습니다. 실제로 질의를 수행하는 시간이 약간 증가합니다.session.createCriteria (...)에 EhCache 사용하기 list()

쿼리는 다음과 같습니다

session.createCriteria(MyEntity.class).list(); 

엔티티는 다음과 같습니다

@Entity 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public class MyEntity { 
    @Id 
    @GeneratedValue 
    private long id; 

    @Column(length=5000) 
    private String data; 

    //---SNIP getters and setters--- 
} 

내있는 hibernate.cfg.xml은 다음과 같습니다

<!-- all the normal stuff to get it to connect & map the entities plus:--> 
<property name="hibernate.cache.region.factory_class"> 
    net.sf.ehcache.hibernate.EhCacheRegionFactory 
</property> 

MyEntity 테이블은 약 2000 행이 포함되어 있습니다.

캐시에 추가하기 전에 위의 쿼리에서 모든 항목을 나열하는 데 평균 65 밀리 초가 걸렸습니다. 캐시 후에는 평균 74ms가 소요됩니다. 내가 빠진 것이 있습니까? 성능 향상을 위해 수행해야 할 추가 작업이 있습니까?

답변

0

기본적으로 쿼리 결과는 이 아니기 때문에 캐시되며 엔티티 만 캐시됩니다. 따라서 쿼리를 실행할 때마다 쿼리와 일치하는 엔터티의 ID를 반환하는 SQL이 여전히 발급되고 있습니다. 그런 다음 해당 엔티티는 캐시에서 검색됩니다 (있는 경우).

쿼리 결과를 캐시하려면, turn that on explicitly이 필요합니다.

+0

감사합니다. 나는 쿼리 캐시를 활성화했으며 확실히 차이를 만듭니다. 쿼리는 워밍업 된 후 캐시되지 않은 상태에서 65ms에서 22ms로 진행되었습니다. –

+0

@James : 더 복잡한 쿼리를 사용하면 그 차이가 더욱 두드러집니다. – skaffman