【问题标题】:Question about Solr caching mechanism关于so​​lr缓存机制的问题
【发布时间】:2012-11-02 23:38:26
【问题描述】:

我在一个 Apache Solr 项目中工作。 (分布在云环境中 - Amazon ec2 实例)。

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

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

当我进行压力测试时 - 大约 5 分钟后 - 我的所有查询都在 Solr 中给出并执行。 这使得系统在繁重的负载下汗流浃背:)(女巫是目的)。 但是,当我再次执行相同的查询集时 - QTime 几乎为零! --> Solr 很轻松,没有压力。

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

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

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

【问题讨论】:

    标签: solr


    【解决方案1】:

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

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

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

    【讨论】:

    • +1。 @user519 ...我不确定评论是否会有所帮助。但尝试将它们设置为 0 大小。无论如何:如果你关闭缓存,基准是无用的!
    • 我知道这一点。问题是:我有 68 000 个唯一查询(从日志中检索)。但是,在测试中——大约 5 分钟后,我的所有查询都被输入系统并缓存进来。如果我想要更长的测试,我必须要有数百万个查询?或者 Lucence / Solr 可以缓存多少查询?
    • 我认为@Karussell 是正确的。这是来自提供的文档页面的引用“如果 fieldValueCache 未在 solrconfig.xml 中声明,那么它会自动为您生成,初始大小为 10,最大大小为 10000,并且没有自动预热。”
    【解决方案2】:

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

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

    以前的答案确实超出了左领域,建议所有基准测试都应该衡量同一件事,即“他自己定义的”现实生活表现。这不是工程的运作方式。

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

    使用缓存进行基准测试有好处...如果您费心测量缓存性能指标。呵呵。

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

    【讨论】:

      猜你喜欢
      • 2011-06-26
      • 1970-01-01
      • 2015-07-02
      • 2011-07-29
      • 2010-10-17
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 2020-09-17
      相关资源
      最近更新 更多