我在Apache Solr项目工作。 (分布在云环境中 - 亚马逊ec2实例)。
我注意到Solr在缓存结果方面做得很好。 当我再次执行相同的查询时 - 响应状态为Solr QTime 0或1毫秒。
我想对Solr系统进行压力测试。因此,我可以使用有限的查询列表(50 000个唯一查询)。现在的问题是所有查询都被缓存了!
当我进行压力测试 - 大约5分钟后 - 我所有的疑问都在Solr&执行。 这使得系统汗水更加沉重负担:)(女巫是目的)。 但是,当我再次执行相同的查询集时 - QTime几乎为零! - > Solr有一个轻松的时间和没有压力。
我的问题: 如何转换所有Solr缓存(Solr和Lucence缓存)? 或者你如何限制缓存?
我试图关闭所有Solr实习生缓存,但缓存仍然存在。 (QueryResultCache和FieldCache) 注意:配置提到Lucence将管理内部缓存 - 可能这个缓存是问题吗?
奇怪的是,所有50 000个查询都可以存储在缓存中 - 开箱即用。
答案 0 :(得分:6)
您可以在配置中注释掉filterCache, queryResultCache and documentCache。 Lucene's FieldCache cannot be disabled
虽然这样做没有任何意义,即使是基准测试。您还会在操作系统中禁用磁盘缓存吗? CPU缓存(所有三个级别)?每个硬盘的内部缓存?
缓存是系统的一部分,如果禁用它们,则无法准确模拟生产中发生的情况,从而导致基准无效。
答案 1 :(得分:3)
关闭缓存是一个很好的主意,至少是特定于应用程序的那些。在这种情况下的基准是我收集的,以找到以前没有见过的查询的响应/成本;而不是在缓存过期中流行的那些。
您听起来像是想要告诉您搜索系统如何执行的指标;不是查询缓存。
以前的答案实际上是在左边的领域,建议所有基准应该衡量同样的事情,“他自己定义的”真实生活表现。这不是工程的工作方式。
关于“磁盘缓存”的评论。 Linux中没有磁盘缓存;只有页面缓存;该页面是保留在磁盘上,在内存中创建和销毁,还是为大型文件系统预先分配的......它们都是页面。
使用缓存进行基准测试是有好处的...如果您懒得测量缓存性能指标。咄。
顺便说一下,在“-server”和“XXcompileThreshold”之间,你要确保你的第一组大量查询要么足够随机,要么专门选择在Solr / Lucene中运行尽可能多的函数路径;所以JIT既活跃又有些稳定。