我进行了一次搜索,第一次用了 3-4 秒。 我第二次运行相同的搜索并且花费了不到 100 毫秒(正如预期的那样,因为它使用了缓存) 然后我通过调用“http://host:port/index/_cache/clear”来清除缓存 接下来我运行相同的搜索并预计它需要 3-4 秒但它花费了不到 100 毫秒
所以清除缓存没有用? 该网址究竟清除了什么? 我如何让 ES 每次都进行原始搜索(即无缓存)?
我正在做一些负载测试的一部分。
最佳答案
清除缓存会清空:
- 字段数据(由构面、排序、地理位置等使用)
- 过滤缓存
- 父/子缓存
- 用于发布列表的布隆过滤器
您看到的效果可能是操作系统文件系统缓存造成的。由于 lucene 段的不可变特性,Elasticsearch 和 Lucene 大量利用操作系统文件系统缓存。这意味着小索引往往会被您的操作系统完全缓存在内存中并变成无盘的。
顺便说一句,在“无缓存”状态下对 Elasticsearch 进行基准测试实际上没有意义。它的设计和构建是为了在缓存环境中运行 - Elasticsearch 以其卓越的性能而著称的大部分原因是它对缓存的出色使用。
为了完全准确,您的基准测试实际上应该查看已完全预热 JVM 的系统(以适当调整新伊甸园空间的大小、优化 JIT 输出等)并使用真实的、类似生产的数据来模拟“真实世界”在 ES 和操作系统级别上的缓存填充和逐出。
诸如“无缓存环境”之类的综合测试意义不大。
关于caching - Elasticsearch 缓存清除似乎没有达到我的预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20150508/