关于Solr缓存机制的问题

时间:2010-11-24 16:17:20

标签: solr

我在Apache Solr项目工作。 (分布在云环境中 - 亚马逊ec2实例)。

我注意到Solr在缓存结果方面做得很好。 当我再次执行相同的查询时 - 响应状态为Solr QTime 0或1毫秒。

我想对Solr系统进行压力测试。因此,我可以使用有限的查询列表(50 000个唯一查询)。现在的问题是所有查询都被缓存了!

当我进行压力测试 - 大约5分钟后 - 我所有的疑问都在Solr&执行。 这使得系统汗水更加沉重负担:)(女巫是目的)。 但是,当我再次执行相同的查询集时 - QTime几乎为零! - > Solr有一个轻松的时间和没有压力。

我的问题: 如何转换所有Solr缓存(Solr和Lucence缓存)? 或者你如何限制缓存?

我试图关闭所有Solr实习生缓存,但缓存仍然存在。 (QueryResultCache和FieldCache) 注意:配置提到Lucence将管理内部缓存 - 可能这个缓存是问题吗?

奇怪的是,所有50 000个查询都可以存储在缓存中 - 开箱即用。

2 个答案:

答案 0 :(得分:6)

您可以在配置中注释掉filterCache, queryResultCache and documentCacheLucene's FieldCache cannot be disabled

虽然这样做没有任何意义,即使是基准测试。您还会在操作系统中禁用磁盘缓存吗? CPU缓存(所有三个级别)?每个硬盘的内部缓存?

缓存是系统的一部分,如果禁用它们,则无法准确模拟生产中发生的情况,从而导致基准无效。

答案 1 :(得分:3)

关闭缓存是一个很好的主意,至少是特定于应用程序的那些。在这种情况下的基准是我收集的,以找到以前没有见过的查询的响应/成本;而不是在缓存过期中流行的那些。

您听起来像是想要告诉您搜索系统如何执行的指标;不是查询缓存。

以前的答案实际上是在左边的领域,建议所有基准应该衡量同样的事情,“他自己定义的”真实生活表现。这不是工程的工作方式。

关于“磁盘缓存”的评论。 Linux中没有磁盘缓存;只有页面缓存;该页面是保留在磁盘上,在内存中创建和销毁,还是为大型文件系统预先分配的......它们都是页面。

使用缓存进行基准测试是有好处的...如果您懒得测量缓存性能指标。咄。

顺便说一下,在“-server”和“XXcompileThreshold”之间,你要确保你的第一组大量查询要么足够随机,要么专门选择在Solr / Lucene中运行尽可能多的函数路径;所以JIT既活跃又有些稳定。