elasticsearch - Elastic Search Scroll API 对 CPU 的影响
问题描述
滚动 API 对节点 CPU 利用率有何影响?我在ES version 6.2
.
即使执行一次查询以获取所有数据,然后使用 获取数据scroll_id
,我们也会遇到 CPU 峰值。
缓存的结果存储在哪里?在内存中还是在磁盘上?
解决方案
您应该在使用后清除滚动“指针”。
超过滚动超时时,搜索上下文会自动删除。然而,保持滚动打开是有代价的,正如上一节中讨论的那样,一旦不再使用滚动,就应该使用 clear-scroll API 显式清除滚动:
如此处所述
通常,后台合并过程通过将较小的段合并在一起以创建新的更大的段来优化索引,此时较小的段被删除。此过程在滚动期间继续,但打开的搜索上下文可防止旧段在仍在使用时被删除。这就是 Elasticsearch 能够返回初始搜索请求结果的方式,而不管后续对文档的更改。
因此,如果您理解良好,则没有缓存。只是您的查询所针对的细分被冻结,直到您的滚动到期。由于段在 Lucene 中是不可变的,它确保您将获得一致的结果,并且您将能够滚动创建滚动时存在的所有数据。但缺点是只要您的滚动“指针”存在,目标段将保持打开状态而不被删除。
因此打开的段数将不断增加,必要的文件处理程序也将增加。因此,在广泛的查询中,特别是如果您同时编制索引,可能会导致性能问题。因为当你索引时,你创建了很多应该在之后合并的小段,但是如果你对它们进行滚动查询,它们就不能被完全合并和删除。
您是否连续索引以及滚动持续时间有多长?
推荐阅读
- oracle - 在弹出警报中而不是在状态栏上显示错误消息
- php - 带有 PHP 的 Google Drive API - 刷新令牌获取消息“刷新令牌必须传入或设置为 setAccessToken 的一部分”的问题
- ruby-on-rails - 尝试使用 Capistrano 部署 Rails 应用程序来做 Droplet
- angularjs - AngularJS 控制器调用 MVC 控制器 - 它成功但启动了一个包含 null 的错误
- git - Git-tfs:获取笔记
- java - 如何检查页面中是否存在弹出窗口?
- haskell - 通过堆栈安装 bhoogle
- r - 从 R 中的线性模型列表中映射 emmeans
- javascript - 如何从另一个任务运行器执行/捆绑 JS 与 Webpack?
- django - Django:在结果中填充用户可选择的数据库字段