弹性搜索Scroll API对CPU的影响

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了弹性搜索Scroll API对CPU的影响相关的知识,希望对你有一定的参考价值。

滚动API对节点的CPU利用率有什么影响?我在ES version 6.2上遇到滚动API的CPU利用率很高。

即使查询完成一次以获取所有数据,然后使用scroll_id获取数据,我们也会遇到CPU峰值。

缓存结果存储在哪里?在内存或磁盘上?

答案

您应该在使用后清除滚动“指针”。

超出滚动超时时,将自动删除搜索上下文。但是,保持滚动打开会产生成本,如上一节所述,因此只要使用clear-scroll API不再使用滚动,就应该显式清除滚动:

正如描述here

通常,后台合并过程通过将较小的段合并在一起来创建新的更大的段来优化索引,此时删除较小的段。此过程在滚动期间继续,但打开的搜索上下文可防止旧片段在仍在使用时被删除。这就是Elasticsearch能够返回初始搜索请求的结果,无论后续的文档更改如何。

所以,如果你理解得很好,就没有缓存。只是您的查询所针对的段被冻结,直到您的滚动到期为止。由于段在Lucene中是不可变的,因此它确保您将获得一致的结果,并且您将能够滚动创建滚动时存在的所有数据。但缺点是只要您的滚动“指针”存在,目标段将保持打开而不会被删除。

因此,打开的段的数量将不断增加,并且必要的文件处理程序也将增加。因此,在广泛的查询中,特别是如果您在同一时间索引,它可能会导致性能问题。从索引开始,您创建了许多应该在之后合并的小段,但如果对它们进行滚动查询,则无法完全合并和删除它们。

您是否连续编制索引以及滚动持续时间有多长?

From documentation

以上是关于弹性搜索Scroll API对CPU的影响的主要内容,如果未能解决你的问题,请参考以下文章

节点js中的REST api,用于使用弹性搜索进行全文搜索

AWS 弹性搜索。禁止/8/索引写入 (api)。无法写入索引

在 _search api 的弹性搜索中支持包含在 _source.includes 中的最大字段数?

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

Android View 的scroll相关方法属性 以及Scroller弹性滑动原理

弹性搜索为所有文档添加空值。如何添加完整的对象/类?