solr缓存大小的调整
1.缓存调的越大越好? 错误的
如果把内存大量的都给了solr那么操作系统的内存就会变小,操作系统可以利用空闲的内存提升io的效率,操作系统本身也有缓存
oscache,solr通过id来获取doc的时候如果可以命中oscache不发生磁盘的读写也会极大的提升速度;
大内存也可以是大垃圾,当大量内存不被命中的时候就是垃圾,而且这些垃圾会触发jvm的GC操作,GC的时候会降低整个系统的效率
查看缓存的命中情况
cumulative_hitratio: 是一个0〜1之间的数,代表请求命中缓存的百分比。
cumulative_inserts: 在缓存的整个生存期中,有多少缓存实体对象被加入的缓存当中。
cumulative_evictions: 在缓存的整个生存期中,有多少缓存实体对象从缓存中被移除。
最终衡量缓存性能的是命中率。你需要做实验调整缓存大小,但时刻要关注命中率,看命中率是不是越来越高。下面是调整缓存大小的一些提示:
如果发现cumulative_evictions比cumulative_inserts高一些,那么可以试着增加缓存大小,观察命中率,有可能是因为缓存实体被移除得太快了。
如果发现缓存的命中率很高,而且cumulative_evictions值很小,那么说明缓存大小设置有点大了。试着减少缓存大小,观察命中率,直到命中率有变化。
如果缓存命中率很也不要觉得灰心,如果你的查询一般都不会有重复的case出现,命中率本来就不可能上来,这时你可以调小缓存的大小。
即使缓存的命中率很低,也不要把缓存关掉。对某些请求来说缓存还是起作用的。把缓存大小调小就可以了,保留缓存是值得的。
当调整了缓存的大小,试着用上面提到过的方法,大体估算一下内存使用的最坏情况。确保不会使用过大的内存。
然后可以开始修改 solrconfig.xml 中缓存的配置了,第一个是过滤器缓存:
<filterCacheclass="solr.FastLRUCache"size="200"initialSize="200" autowarmCount="100"/>
第二个是查询结果缓存:
<queryResultCacheclass="solr.FastLRUCache"size="500"initialSize="500"autowarmCount="250"/>
第三个是文档缓存:
<documentCacheclass="solr.FastLRUCache"size="11000"initialSize="11000"/>
这几个配置是基于以上的几个假设的值进行调优的。
欢迎大家关注我的微信公众号 您的关注就是我不懈的动力