Skip to content
章节导航

ElasticSearch 8.x 常见性能优化最佳实践

背景

  • 官方数据Elastic Search最高的性能可以达到,PB级别数据秒内相应: 1PB = 1024TB = 1024GB * 1024GB
  • 但是很多同学公司的 Elastic Search 集群,里面存储了几百万或者几千万数据,但是 ES 查询就很慢了
  • ES 数量常规是亿级别为起点,之所以达不到官方的数据,多数是团队现有技术水平不够和业务场景不一样
  • 海量数据检索领域榜单:https://db-engines.com/en/ranking/search+engine

硬件资源优化

内存分配

  • 将足够的堆内存分配给 Elasticsearch 进程,以减少垃圾回收的频率
  • ElasticSearch推荐的最大 JVM 堆空间是 30~32G, 所以分片最大容量推荐限制为 30GB
  • 30G heap 大概能处理的数据量 10 T,如果内存很大如128G,可在一台机器上运行多个 ES 节点
  • 比如业务的数据能达到200GB, 推荐最多分配7到8个分片

存储器选择

  • 使用高性能的存储器,如SSD,以提高索引和检索速度
  • SSD 的读写速度更快,适合高吞吐量的应用场景。

CPU 和网络资源

根据预期的负载需求,配置合适的CPU和网络资源,以确保能够处理高并发和大数据量的请求。

分片和副本优化:

合理设置分片数量

  • 过多的分片会增加CPU和内存的开销,因此要根据数据量、节点数量和性能需求来确定分片的数量。
  • 一般建议每个节点上不超过20个分片

考虑副本数量

  • 根据可用资源、数据可靠性和负载均衡等因素,设置合适的副本数量
  • 至少应设置一个副本,以提高数据的冗余和可用性。
  • 不是副本越多,检索性能越高,增加副本数量会消耗额外的存储空间和计算资源,

索引和搜索优化

映射和数据类型

  • 根据实际需求,选择合适的数据类型和映射设置
  • 避免不必要的字段索引,尽可能减少数据在硬盘上的存储空间。

分词和分析器

  • 根据实际需求,选择合适的分词器和分析器,以优化搜索结果。
  • 了解不同分析器的性能特点,根据业务需求进行选择

查询和过滤器

  • 使用合适的查询类型和过滤器,以减少不必要的计算和数据传输
  • 尽量避免全文搜索和正则表达式等开销较大的查询操作。

缓存和缓冲区优化

缓存大小

  • 在Elasticsearch的JVM堆内存中配置合适的缓存大小,以加速热数据的访问
  • 可以根据节点的角色和负载需求来调整缓存设置。

索引排序字段

  • 选择合适的索引排序字段,以提高排序操作的性能
  • 对于经常需要排序的字段,可以为其创建索引,或者选择合适的字段数据类型。

监控和日志优化, 监控集群性能

  • 使用 Elasticsearch 提供的监控工具如 Elastic Stack 的 Elasticsearch 监控、X-Pack 或其他第三方监控工具
  • 实时监控集群的健康状态、吞吐量、查询延迟和磁盘使用情况等关键指标。

集群规划和部署:

多节点集群

使用多个节点组成集群,以提高数据的冗余和可用性。多节点集群还可以分布负载和增加横向扩展的能力。

节点类型和角色

  • 根据节点的硬件配置和功能需求,将节点设置为合适的类型和角色
  • 如数据节点、主节点、协调节点等,以实现负载均衡和高可用性。

性能测试和优化:

压力测试

  • 使用性能测试工具模拟真实的负载,评估集群的性能极限和瓶颈
  • 根据测试结果,优化硬件资源、配置参数和查询操作等。

日常性能调优

通过监控指标和日志分析,定期评估集群的性能表现,及时调整和优化配置,以满足不断变化的需求。

升级和版本管理

计划升级

  • 定期考虑升级 Elasticsearch 版本,以获取新功能、性能改进和安全修复。
  • 在升级过程中,确保备份数据并进行合理的测试。

版本管理

跟踪 Elasticsearch 的发行说明和文档,了解新版本的特性和已知问题,并根据实际需求选择合适的版本。