Elasticsearch 性能优化与监控指南
1. 并行查询
很多时候,人们会忽略查询并行化的需求。假设集群中有十几个节点,但索引仅由一个分片构成。若索引规模庞大,查询性能将远低于预期。即便增加副本数量,也无济于事,因为单个查询仍会指向该索引的单个分片,副本不过是主分片的复制,包含相同数据。不仅单分片索引存在此问题,若分片数量虽多但每个分片都很大,同样会有性能问题。毕竟,查询速度取决于最慢的部分查询响应。
不过,是否进行并行化还需结合具体用例。若向 Elasticsearch 发起大量查询,且分片足够小、未出现分片级别的问题,或许无需并行化查询。一般而言,可查看 Elasticsearch 节点是否有未使用的 CPU 核心,若有,则存在优化和并行化的空间。
2. 字段数据缓存与熔断机制
为避免内存溢出错误,可调整两个因素。一是限制字段数据缓存的大小,二是配置熔断机制,使其在数据加载过多时抛出异常,而非继续加载。合理配置这两项,可有效避免内存问题。即便大量使用文档值,仍可能遭遇内存问题,例如分析字段无法使用文档值,需使用字段数据缓存,此时就需正确配置字段数据缓存和熔断机制。
3. 控制大小和分片大小
处理使用聚合的查询时,可利用size和shard_size两个属性。size参数决定最终聚合结果应返回的桶数量,聚合最终结果的节点会从每个返回结果的分片中获取前几个桶,仅将前size个桶返回给客户端。shard_size参数在分片级别起到类似作用。增