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

new*_*bie 5 caching elasticsearch

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

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

我正在做一些负载测试的一部分.

Zac*_*ach 5

清除缓存将清空:

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

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

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

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

诸如"无缓存环境"之类的综合测试毫无意义.

  • 我不喜欢"在无缓存状态下对Elasticsearch进行基准测试没有意义"这个答案我到处都读到了.我有一个慢查询(使用bigdata),我正在尝试调试,我需要清除缓存以正确调试它.在分析代码时,使用"无缓存"进行测试具有重要意义.而且现在我无法调试我的慢查询,因为每次尝试时,我都会得到0.04ms的时间执行,多亏了这个缓存,我无法刷新. (4认同)