索引压力

edit

将文档索引到Elasticsearch中会引入系统负载,表现为内存和CPU负载。每个索引操作包括协调、主分片和副本阶段。这些阶段可以在集群中的多个节点上执行。

索引压力可以通过外部操作(如索引请求)或内部机制(如恢复和跨集群复制)逐渐积累。如果系统中引入了过多的索引工作,集群可能会变得饱和。这可能会对其他操作(如搜索、集群协调和后台处理)产生不利影响。

为了防止这些问题,Elasticsearch 内部监控索引负载。当负载超过一定限制时,新的索引工作将被拒绝

索引阶段

edit

外部索引操作经过三个阶段:协调、主分片和副本分片。请参阅基本写入模型

内存限制

edit

节点设置 indexing_pressure.memory.limit 限制了可用于未完成索引请求的字节数。此设置默认值为堆内存的10%。

在每个索引阶段的开始,Elasticsearch会计算索引请求消耗的字节数。这个计算只在索引阶段结束时释放。这意味着上游阶段将计算请求的开销,直到所有下游阶段完成。例如,协调请求将保持计算,直到主分片和副本阶段完成。主请求将保持计算,直到每个同步副本响应,以在必要时启用副本重试。

当协调或主节点上的未完成协调、主节点和副本索引字节数超过配置的限制时,节点将开始拒绝新的索引工作。

当未完成的副本索引字节数超过配置限制的1.5倍时,节点将在副本阶段开始拒绝新的索引工作。这一设计意味着,随着索引压力在节点上增加,它们将自然停止接受协调和主工作,以支持未完成的副本工作。

默认情况下,indexing_pressure.memory.limit 设置的 10% 限制是相当宽松的。只有在经过仔细考虑后,您才应该更改它。只有索引请求会对此限制产生影响。这意味着还有其他索引开销(缓冲区、监听器等)也需要堆空间。Elasticsearch 的其他组件也需要内存。如果将此限制设置得过高,可能会导致其他操作和组件无法获得足够的操作内存。

监控

edit

您可以使用 节点统计信息 API来 检索索引压力指标。

索引压力设置

edit
indexing_pressure.memory.limit logo cloud
索引请求可能消耗的未完成字节数。当达到或超过此限制时,节点将拒绝新的协调和主操作。当副本操作消耗1.5倍此限制时,节点将拒绝新的副本操作。默认为堆内存的10%。