我正在对使用Hibernate中的二级缓存(启用EhCache)的性能提升进行基准测试,但它似乎并没有提高性能。实际上,执行查询的时间略有增加。
查询是:
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毫秒。在缓存之后,它们平均需要74毫秒。有什么我想念的吗?是否还有一些需要做的事情可以提高性能?
答案 0 :(得分:0)
默认情况下,查询结果不缓存,只缓存实体。因此,每次运行查询时,仍会发出SQL,它返回与查询匹配的实体的ID。然后从缓存中检索这些实体(如果存在)。
如果要缓存查询结果,则需要turn that on explicitly。