p99 ElasticSearch查询期间延迟高

quhf5bfb  于 2023-08-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(124)

我有一个三节点的Elasticsearch设置,由一个专用的主节点和两个数据节点组成,它们也有资格成为主节点。该索引包含220万个文档,有2个主分片和1个副本。每个数据节点保存一半的数据(50%在主分片中,50%在副本中)。
我面临的问题是,我的查询的P99延迟一直在500ms左右,考虑到相对较小的数据大小(6GB),这似乎很高。这些查询是简单的bool必须查询,带有一些过滤器和对长类型字段的排序。

**其他注意事项:**每天都会以1k个文档的批量进行写入,每小时大约写入100k个条目。写入是对现有文档的更新,并且文档总数保持在220万。我没有使用索引翻转或基于时间的索引,所以所有数据都存在于同一个索引中。现在,我有几个问题来优化我的Elasticsearch集群的性能:

直接查询数据节点:由于一个数据节点拥有所有数据(50%在主分片中,50%在副本中),直接查询该数据节点是否有助于提高查询性能?或者数据节点仍然会向另一个数据节点发送一些负载?
添加协调器节点:我是否应该添加第四个专用协调器节点并向其发送查询?这是否有助于提高查询性能,是否能在数据节点之间有效地分配负载?如果协调器节点关闭会发生什么情况(我应该添加多个协调器节点吗)?
P99延迟优化:在我当前的设置中,是否有任何特定的配置设置或策略可以实现来优化P99延迟并减少查询响应时间?
为了提高Elasticsearch集群中的查询性能,我做了以下更改:
查询的DNS指向:我没有将查询定向到主节点,而是更改了DNS指向,将查询直接发送到数据节点。由于其中一个数据节点保存了所有数据(50%在主分片中,50%在副本中),因此我预计这一更改可能会通过避免到主节点的额外网络跳数来减少查询响应时间。
刷新时间:我将索引刷新间隔减少到30秒以改善查询延迟。
然而,尽管做了这些改变,我没有观察到P99潜伏期有任何显著改善。查询响应时间保持在500ms左右,这高于预期,因为数据大小相对较小(6GB),并且设置经过优化。

b1zrtrql

b1zrtrql1#

您是否设置了分片(路由)密钥?您在查询数据时使用它吗?https://opster.com/guides/elasticsearch/glossary/elasticsearch-routing/
对于您的具体情况,我实际上会建议您使用1个碎片和几个副本。因为它没有那么多的数据。基本建议是1个分片<= 30- 40 GB(有人说是25 GB)。
我不确定是否真的需要任何写入优化或数据/协调器节点优化,因为您的数据大小非常非常小,如果您的集群不在Raspberry Pi上运行-它应该像魅力一样工作。:—)
所以在索引上尝试这样的东西

"settings":{
    "index":{
        "refresh_interval": "10s",
        "number_of_replicas": 2,
        "number_of_shards": 1

    }
}

字符串
另外,如果你能提供任何查询的例子-这将是更好的,我可以看看他们)

相关问题