ElasticSearch 在大规模聚合时速度明显减慢

ElasticSearch 在大规模聚合时速度明显减慢

我的目标是使用 ElasticSearch v1.3.2 分析产品交叉销售,因此我需要筛选感兴趣的收据(例如酒精产品)并查找每个类别的畅销产品。新数据将每月编入索引,同时我们将对其进行分析查询。

每个文档都是一张收据,其中包含总体信息(总销售额、商店 ID 等)、单个产品信息(产品 ID、产品数量、总价值)以及产品树不同级别的汇总信息。平均一张收据有 8 个项目,因此每个收据文档有 10 - 100 个嵌套文档。总共有 5000 万张收据,其中包含 3.9 亿个产品子文档(加上一些用于汇总产品树级别的文档)。

目前,单个 ES 节点运行在一台 Ubuntu 虚拟机上,该虚拟机具有 16 GB 的 RAM(ES 和 OS 各占 50%),数据位于 HDD 上的虚拟磁盘上。总索引大小约为 120 GB,由于之前出现内存不足问题,所有字段都具有“format: doc_values”。所有数据缓存在 RAM 上后,我的响应时间为 500 - 4000 毫秒,但一旦数据变得足够大,ES 就会停止运行。我有 140 个分片(每个索引 10 个),大小从 200 MB 到 2 GB 不等。

在运行一些基准查询后,ES 的性能开始下降,不断使用 50% 的 CPU 来执行某些操作(即使查询未运行),并且 head 插件对“localhost:9200/stats?all=true”的查询最多需要 45 秒。我安装了 Marvel 的开发版本,它开始在 /.marver-kibana/appdata/marvelOpts 查询上报告 404。

我真的需要更多 RAM 和/或更多节点吗(目前 RAM 占全部数据大小的 13%),还是我应该尝试一些调整?我想索引 4 倍于当前数据量的数据。之前我在一台 8 GB 的虚拟机上进行测试,一半的数据也出现了类似的症状。如果有用的话,我会提供更多信息。

相关内容