news 2026/9/24 17:29:49

【ES】[教程]----第六章:Elasticsearch 性能优化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【ES】[教程]----第六章:Elasticsearch 性能优化

文章目录

  • 优化总结
  • 一、硬件选择
  • 二、分片策略
    • 1. 合理设置分片数
    • 2. 路由选择
  • 三、写入速度优化
      • 3.1 批量数据提交
      • 3.2 优化存储设备
      • 3.3 合理使用合并
      • 3.4 减少Refresh次数
      • 3.5 加大Flush设置
      • 3.6 减少副本数量
  • 四、内存设置
  • 五、重要配置

优化总结

  1. 采用SSD固态硬盘
  2. 合理分配分片数量(非越多越好)
  3. 按业务调整刷盘时机
  4. 内存不超过32G
  5. 采用批量插入

一、硬件选择

  1. 使用SSD固态硬盘
  2. 避免外挂存储(如NFS)

二、分片策略

1. 合理设置分片数

  • 控制单分片容量不超过ES最大JVM堆空间(通常≤32G),如500G索引约需16个分片
  • 分片数不超过节点数的3倍(避免单节点多分片导致故障风险)
  • 数量关系参考:节点数≤主分片数×(副本数+1)

2. 路由选择

  • 分片计算方式:shard = hash(routing) % number_of_primary_shards(routing默认为文档ID,可自定义如用户ID)
  • 不带路由查询:请求全部分片,协调节点汇总排序后返回
  • 带路由查询(如userid):可直接定位数据所在分片

三、写入速度优化

3.1 批量数据提交

使用_bulk API,单次批量建议5-15MB(约1000-5000条文档)

3.2 优化存储设备

优先使用SSD

3.3 合理使用合并

  • 设置index.merge.policy.max_merged_segment(如5GB),避免过大段导致IO峰值
  • 减少手动触发合并(_forcemerge)

3.4 减少Refresh次数

调大index.refresh_interval(如30秒或1分钟),减少刷新频率(需接受数据可见延迟)

3.5 加大Flush设置

调大index.translog.flush_threshold_size(如1GB)或index.translog.sync_interval,减少Flush次数(注意:未刷盘时节点故障可能丢失数据)

3.6 减少副本数量

临时场景(如全量导入)可将副本数设为0(number_of_replicas: 0),完成后恢复

四、内存设置

  • 建议-Xms-Xmx值相同,为物理内存的50%且≤31GB(非越大越好)

五、重要配置

参数名参数值说明
cluster.nameelasticsearch集群名称,建议与数据相关,同网段同名节点可自动发现
node.namenode-1集群内唯一节点名,可设为主机名(如node.name:${HOSTNAME}
node.mastertrue是否为候选主节点(需选举确定)
node.datatrue是否存储索引数据(数据操作在此类节点完成)
index.number_of_shards1默认索引分片数,可创建时调整(数据量小时设为1效率高)
index.number_of_replicas1默认索引副本数,副本越多可用性越好但写入同步开销越大
transport.tcp.compresstrue节点间数据传输是否压缩(默认不压缩)
discovery.zen.minimum_master_nodes1选举主节点所需最少候选节点数,合理值为(master_eligible_nodes/2)+1(避免脑裂)
discovery.zen.ping.timeout3s节点发现时Ping超时时间,网络差时可调大(防止误判节点状态)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 1:25:45

Python接口测试实践:参数化测试、数据驱动测试和断言的使用

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快在Python接口测试实践中,参数化测试、数据驱动测试和断言是常用的技术手段。参数化测试参数化测试是指将测试用例中的某些部分(如输入数据或…

作者头像 李华
网站建设 2026/9/24 1:27:56

JAVA源码揭秘:智能充电桩物联网系统实现

JAVA源码揭秘:智能充电桩物联网系统实现智能充电桩物联网系统通过JAVA技术实现设备互联、数据交互与业务逻辑处理,其核心架构可分为感知层、网络层、平台层和应用层。以下从技术实现、核心模块、关键代码及系统优化四个维度进行源码级解析:一…

作者头像 李华
网站建设 2026/9/24 1:29:53

接口测试基础知识,如何开展接口测试?

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快一、接口测试基础理论接口测试:接口测试是测试系统组件间接口的一种测试,主要用于测试系统与外部其他系统之间的接口,以及系统内…

作者头像 李华
网站建设 2026/9/23 20:00:34

app生病记录设计+花费记录设计

关注的内容:1 生病时间2 生病的原因分析3 生病持续时间,痊愈时间我看着这个好像是个标准的计划。也许可以用一个计划来记录这个情况,然后带个额外的标记,这样就可以使用以前的代码来处理这个了。---------生活开支记录设计&#x…

作者头像 李华
网站建设 2026/9/23 20:00:33

JAVA源码解析:易卡随行名片系统高效搭建

以下从Java源码视角深度解析“易卡随行”智能名片管理系统的高效搭建路径,聚焦技术架构、核心模块实现与性能优化策略:一、技术架构的源码实现1. 微服务拆分与通信服务划分:基于Spring Boot实现名片服务、用户服务、权限服务、统计服务四大微…

作者头像 李华