当前位置: 首页 > news >正文

es性能优化

先思考

1,硬件

至少4C8G

多节点

2,索引

分片合理 比如5主1副,根据数据量计算分片

刷新时机30s

3,写入

批量

多线程并行

4,查询

并行查询

补充

2,

mapping 优化

Doc Values优化

  • 聚合/排序必须依赖doc_values

  • 对纯过滤字段可禁用节省空间:

选择合适text keyword

3,写入

刷新30s

4,查询

只查询需要的

用filter代替query,filter不计算评分,可走缓存

深分页:search_after代替 from size

DS

Elasticsearch 性能优化全面指南

Elasticsearch 性能优化需要从多个维度进行综合考虑。以下是系统化的优化方案,按照优先级排序:

一、硬件与基础设施优化

1. 节点配置

  • 内存分配

    • JVM堆内存不超过物理内存的50%(最大不超过32GB)

    • 剩余内存留给文件系统缓存

    • 示例配置:-Xms16g -Xmx16g

  • 磁盘选择

    • 使用SSD(特别是高IOPS场景)

    • 避免使用NFS等网络存储

    • 推荐配置:RAID 0或单块高性能SSD

  • CPU核心

    • 每个节点至少4-8核

    • 搜索密集型场景需要更多核心

2. 集群规划

  • 分片策略

    • 单个分片大小控制在10-50GB

    • 分片数 = 数据总量(GB)/30GB

    • 示例:500GB数据 → 17个分片

  • 节点角色分离

yaml

复制

下载

node.master: true
node.data: false
node.ingest: false
  • 专用master节点(3-5个)

  • 专用data节点

  • 专用coordinating节点

二、索引设计优化

1. 映射优化

  • 字段精简

    • 禁用不需要的字段:"enabled": false

    • 排除不需要返回的字段:"store": false

  • 类型选择

    • 数值类型选择最小够用的类型(如byte代替integer)

    • 文本搜索使用text,精确匹配使用keyword

  • 多字段配置

json

复制

下载

{"product_name": {"type": "text","fields": {"raw": { "type": "keyword" }}}
}

2. 索引设置

json

复制

下载

{"settings": {"index": {"number_of_shards": 10,"number_of_replicas": 1,"refresh_interval": "30s","translog": {"sync_interval": "5s","durability": "async"}}}
}

三、查询性能优化

1. 查询DSL优化

  • 使用filter代替query

    • filter不计算评分,可利用缓存

json

复制

下载

{"query": {"bool": {"filter": [{"term": { "status": "active" }}]}}
}
  • 避免深度分页

    • 使用search_after代替from/size

    • 对于TOP N结果使用"size": 0 + 聚合

  • 字段数据加载

    • 禁用不需要排序/聚合字段的doc_values:

    json

    复制

    下载

    {"price": {"type": "integer","doc_values": false}
    }

2. 搜索模板

  • 使用预编译查询模板

json

复制

下载

POST _scripts/search_template_1
{"script": {"lang": "mustache","source": {"query": {"match": {"{{field}}": "{{value}}"}}}}
}

四、写入性能优化

1. 批量操作

  • 合理的bulk大小

    • 建议5-15MB/请求

    • 通过测试找到最佳值

  • 并行化写入

    • 多线程发送bulk请求

    • 根据集群规模调整并发数

2. 刷新与合并优化

json

复制

下载

PUT /my_index/_settings
{"index": {"refresh_interval": "30s","merge": {"scheduler": {"max_thread_count": 1}}}
}

五、监控与维护

1. 关键监控指标

  • 集群健康

    • GET _cluster/health

    • 关注unassigned_shards和pending_tasks

  • 节点状态

    • GET _nodes/stats

    • 重点监控JVM堆内存、GC时间、IO等待

2. 定期维护

  • 冷数据归档

    • 使用ILM(Index Lifecycle Management)

    • 示例策略:

json

复制

下载

PUT _ilm/policy/cold_data_policy
{"policy": {"phases": {"hot": {"actions": {"rollover": {"max_size": "50gb"}}},"delete": {"min_age": "30d","actions": {"delete": {}}}}}
}
  • 定期force merge

bash

复制

下载

POST /my_index/_forcemerge?max_num_segments=1
http://www.dtcms.com/a/269123.html

相关文章:

  • 国产ARM+FPGA工业开发平台——GM-3568JHF
  • LeetCode 151. 反转字符串中的单词
  • 软考(软件设计师)存储管理—存储空间管理,文件共享保护
  • 虚幻引擎Gameplay框架
  • STM32固件升级设计——串口IAP升级(基于YMODEM协议)
  • CosyVoice2.0整合包:免费一键启动,释放语音克隆的创意潜能
  • day048-系统负载高排查流程与前后端分离项目
  • 上传Vue3+vite+Ts组件到npm官方库保姆级教程
  • python高级变量XIV
  • 【数据结构之哈夫曼树与编码实现】
  • 【Linux操作系统】简学深悟启示录:Linux基本指令
  • OpenStack扩展
  • 05. study_JSBridge机制
  • 7.7日 实验03-Spark批处理开发(2)
  • Playfun即将开启大型Web3线上活动,打造沉浸式GameFi体验生态
  • C++11标准库算法:深入理解std::none_of
  • 低代码平台的性能测试实践与挑战
  • qiankun 微前端项目中的 Token 鉴权方案
  • python dict list 去重
  • 【数据驱动视角下的流体模拟:CFD 与深度学习(GANs/PINN)在圆柱绕流及机翼分析中的应用】
  • Video Background Remover V3版 - AI视频一键抠像/视频换背景 支持50系显卡 一键整合包下载
  • 动手学深度学习13.7. 单发多框检测(SSD)-笔记练习(PyTorch)
  • Pycharm恢复默认设置,配置导致复制粘贴等不能使用
  • 气候大模型的演化路径与产业落地展望:AI重构全球气候科学的新范式
  • 在bash shell 函数传递数组的问题
  • CSS知识复习4
  • 卷积神经网络:卷积层的核心原理与机制
  • MATLAB | 绘图复刻(二十一)| 扇形热图+小提琴图
  • C++11中的std::ratio:编译时有理数运算的艺术
  • 暑假算法日记第三天