【问题标题】:Elasticsearch slow search query performanceElasticsearch 缓慢的搜索查询性能
【发布时间】:2023-03-30 06:52:01
【问题描述】:

我在调整 Elasticsearch 以提供高搜索查询性能时遇到了很多问题。这些是我的规格:

ES 设置: 版本:0.90.0,集群中有 2 个节点(m3.2xlarge aws 实例),每个 32GB RAM,50% 分配给 ES_HEAP_SIZE,无交换

数据: 75MM 文档,每个 25 个字段

针对基准的查询: 针对 5 个文本字段的多重匹配查询

herehere 提到的所有方法我都试过了

高达 30 个请求/秒的输入查询频率,响应时间保持小于 1 秒。超过 30 多个请求/秒,性能下降,响应时间增加到 50 秒。虽然发生这种情况,但 JVM 堆是稳定的(在 bigdesk 中约为 7-8),并且 GC 也很稳定。但是,CPU 迅速增加,达到 800%(8 核),平均负载非常高 16。热线程不断在搜索和评分函数之间切换,如 BooleanScorer2.nextDoc、BooleanQuery.createWeight、DisjunctionSumScorer.advance、BufferedIndexInput.refill之类的

问题:您能否帮我找出在 30 个请求/秒后性能下降的原因,以及如何通过更改集群配置来解决这个问题。

提前致谢!

【问题讨论】:

  • 你能增加搜索队列的大小,看看发生了什么
  • 感谢 Vineeth 的建议。我尝试将搜索的线程池峰值从默认的 16 增加到 40。它对我可以支持的亚秒级延迟的最大请求数/秒没有影响。 CPU 仍然以 30 次请求/秒的速度达到最大值,此后响应时间下降。

标签: java database elasticsearch lucene elasticsearch-query


【解决方案1】:

我知道您看到的是 CPU 密集型行为,但是当您开始遇到性能问题时,您是否看到任何 I/O 峰值?

如果您将索引存储在 EBS 卷上,我不会因为像您这样的测试开始看到 I/O 饱和而感到惊讶。 M3 实例具有快速的本地(临时)SSD 卷,如果您正在调整响应能力,您应该确保您的索引存储在本地。

https://www.elastic.co/blog/performance-considerations-elasticsearch-indexing

我意识到这并不能直接说明 CPU 问题,但是您可以采取任何措施来提高单个查询的响应速度(包括过滤/等...),从而提高您的吞吐量。

【讨论】:

    猜你喜欢
    • 2015-04-11
    • 2016-03-09
    • 1970-01-01
    • 2017-04-11
    • 2018-07-09
    • 2022-01-09
    • 2018-11-21
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多