索引压力
编辑索引压力
编辑将文档索引到 Elasticsearch 会引入系统负载,表现为内存和 CPU 负载。每个索引操作都包括协调、主分片和副本分片阶段。这些阶段可以在集群中的多个节点上执行。
索引压力可以通过外部操作(例如索引请求)或内部机制(例如恢复和跨集群复制)积累。如果系统中引入的索引工作过多,集群可能会饱和。这会对其他操作产生不利影响,例如搜索、集群协调和后台处理。
为了防止这些问题,Elasticsearch 内部会监控索引负载。当负载超过特定限制时,将拒绝新的索引工作。
索引阶段
编辑外部索引操作会经历三个阶段:协调、主分片和副本分片。请参阅 基本写入模型。
内存限制
编辑indexing_pressure.memory.limit
节点设置限制了可用于未完成索引请求的字节数。此设置默认为堆的 10%。
在每个索引阶段的开始,Elasticsearch 会计算索引请求消耗的字节数。此计算仅在索引阶段结束时释放。这意味着上游阶段将计算请求开销,直到所有下游阶段完成。例如,协调请求将保持计算,直到主分片和副本分片阶段完成。主分片请求将保持计算,直到每个同步副本都已响应,以便在必要时启用副本重试。
当未完成的协调、主分片和副本分片索引字节数超过配置的限制时,节点将在协调阶段或主分片阶段开始拒绝新的索引工作。
当未完成的副本分片索引字节数超过配置限制的 1.5 倍时,节点将在副本分片阶段开始拒绝新的索引工作。这种设计意味着,随着索引压力在节点上增加,它们将自然地停止接受协调和主分片工作,而优先处理未完成的副本分片工作。
indexing_pressure.memory.limit
设置的 10% 默认限制是慷慨的。只有经过仔细考虑后才能更改它。只有索引请求才会对此限制做出贡献。这意味着还有额外的索引开销(缓冲区、监听器等)也需要堆空间。Elasticsearch 的其他组件也需要内存。将此限制设置得过高可能会拒绝其他操作和组件的运行内存。
监控
编辑您可以使用 节点统计 API 来检索索引压力指标。