我在一个Apache Solr项目中工作。(分布在云环境中-亚马逊ec2实例)。
我注意到Solr在缓存结果方面做得很好。当我再次执行相同的查询时-响应状态为Solr QTime 0或1毫秒。
我想对Solr系统进行压力测试。因此,我可以使用的查询列表有限(50000个唯一查询)。现在的问题是所有的查询都被缓存了!
当我进行压力测试时--大约5分钟后--我所有的查询都会在Solr中给出并执行。这使得系统在繁重的负载下冒汗:) (这就是目的)。但是,当我再次执行相同的查询集时- QTime几乎为零!--> Solr很轻松&没有压力。
我的问题是:如何关闭所有Solr缓存(包括Solr和Lucence缓存)?或者如何限制缓存?
我已经尝试关闭所有Solr内部缓存,但缓存仍然存在。( QueryResultCache和FieldCache )注:配置中提到Lucence将管理一个内部缓存--也许这个缓存就是问题所在?
奇怪的是,所有50,000个查询都可以存储在缓存中--开箱即用。
发布于 2010-11-25 03:59:43
您可以注释掉配置中的filterCache, queryResultCache and documentCache。Lucene's FieldCache cannot be disabled。
尽管这样做没有任何意义,即使对于基准测试也是如此。您还会在操作系统中禁用磁盘缓存吗?CPU缓存(所有三个级别)?每个硬盘的内部缓存?
缓存是系统的一部分,如果您禁用它们,您将无法准确地模拟生产中发生的情况,从而使基准测试无用。
发布于 2012-11-02 23:38:27
关闭缓存是一个很好的想法,至少是那些特定于应用程序的缓存。本例中的基准测试旨在找出以前从未见过的查询的响应/成本;而不是那些在缓存过期时很流行的查询。
听起来,您想要的是告诉您搜索系统执行情况的指标,而不是查询缓存。
之前的答案真的很离谱,建议所有基准都应该衡量相同的东西,“他自己对现实生活表现的定义”。这不是工程的工作方式。
关于“磁盘缓存”的评论。Linux中没有磁盘缓存;只有一个页面缓存;无论该页面是持久存储在磁盘上、在内存中创建和销毁的,还是预先分配给大型文件系统(即smart....they )的,都是页面。
使用缓存进行基准测试是有好处的。如果您不厌其烦地测量缓存性能指标。是啊。
顺便说一句,在"-server“和"XXcompileThreshold”之间,你想要确保你的第一个大型查询集是足够随机的,或者是专门选择的,以便在Solr/Lucene中执行尽可能多的函数路径;因此,JIT既是活跃的,也是固定的。
https://stackoverflow.com/questions/4268966
复制相似问题