2010-11-24 64 views
6

我正在Apache Solr项目中工作。 (分布在云环境 - Amazon ec2实例中)。关于Solr缓存机制的问题

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

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

当我压力测试 - 5分钟左右后 - 我的所有查询都在Solr &执行。 这使得系统汗流heavy背的重担:)(女巫是目的)。 但是,当我再次执行相同的查询集时 - QTime几乎为零! - > Solr有一个简单的时间&没有强调。

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

我试过把所有的Solr实习生缓存,但缓存仍然停留。 (QueryResultCache和FieldCache) 注意:配置提到Lucence会管理内部缓存 - 也许这个缓存是问题?

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

回答

6

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

尽管这样做并没有什么意义,即使是基准测试。你还会在操作系统中禁用磁盘缓存吗? CPU缓存(全部三个级别)?每个硬盘的内部缓存?

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

+1

+1。 @ user519 ...我不确定注释是否有帮助。但尝试将它们设置为0大小。无论如何:如果你把缓存关闭,基准是无用的! – Karussell 2010-11-24 20:28:42

3

关闭缓存是一个很好的主意,至少那些应用程序特定的。本例中的基准旨在收集查找以前未见过的查询的响应/成本;而不是那些在缓存中流行的过期。

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

以前的答案确实超出了左边界,这意味着所有的基准测量都应该是相同的,“他自己对”现实生活中的表现“的定义。这不是工程学的工作原理。

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

利用高速缓存进行基准测试是有好处的......如果您打算测量高速缓存性能指标。咄。

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