首页 > 解决方案 > Elastic Search Scroll API 对 CPU 的影响

问题描述

滚动 API 对节点 CPU 利用率有何影响?我在ES version 6.2.

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

缓存的结果存储在哪里?在内存中还是在磁盘上?

标签: elasticsearchscrollcpu

解决方案


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

超过滚动超时时,搜索上下文会自动删除。然而,保持滚动打开是有代价的,正如上一节中讨论的那样,一旦不再使用滚动,就应该使用 clear-scroll API 显式清除滚动:

如此处所述

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

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

因此打开的段数将不断增加,必要的文件处理程序也将增加。因此,在广泛的查询中,特别是如果您同时编制索引,可能会导致性能问题。因为当你索引时,你创建了很多应该在之后合并的小段,但是如果你对它们进行滚动查询,它们就不能被完全合并和删除。

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

从文档


推荐阅读