Elasticsearch缓存清除似乎没有达到我的预期

时间:2013-11-22 17:07:32

标签: caching elasticsearch

我第一次进行了搜索,花了3-4秒。 我第二次运行相同的搜索,花了不到100毫秒(正如预期的那样,它使用了缓存) 然后我通过调用“http://host:port/index/_cache/clear”清除缓存 接下来我运行相同的搜索,并期望它需要3-4秒,但它花了不到100毫秒

因此清除缓存不起作用? 究竟是什么被这个网址清除了? 我如何让ES每次都进行原始搜索(即没有缓存)?

我正在做一些负载测试。

2 个答案:

答案 0 :(得分:5)

清除缓存将清空:

  • 字段数据(由构面,排序,地理位置等使用)
  • 过滤缓存
  • 父/子缓存
  • 用于发布列表的Bloom过滤器

您看到的效果可能是由于OS文件系统缓存造成的。由于lucene段的不可变性,Elasticsearch和Lucene大量利用OS文件系统缓存。这意味着小型索引往往被您的操作系统完全缓存在内存中并变为无盘。

顺便说一句,将Elasticsearch标记为“无缓存”状态并不合理。它的设计和构建是为了在缓存环境中运行 - Elasticsearch的大部分性能都归功于它对缓存的出色使用。

为了完全准确,您的基准测试应该真正关注一个已经完全加热JVM的系统(正确调整新的eden空间大小,优化JIT输出等)并使用类似生产的真实数据来模拟“现实世界“在ES和OS级别上缓存填充和逐出。

诸如“无缓存环境”之类的综合测试毫无意义。

答案 1 :(得分:1)

我不知道这是否是您遇到的情况,但是当您调用清除缓存时,缓存不会立即清除。计划在接下来的60秒内删除。

来源:https://www.elastic.co/guide/en/elasticsearch/reference/1.5/indices-clearcache.html