ES调试与优化工作笔记
创始人
2025-05-30 19:32:58

本文主要涉及关于elastcisearch 关于内存,mapping,查询语句,系统性能查看方面基本的内容和一些调试方法的整理和收集。

参考阅读

  • 官方关于index性能优化方案

    • https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-indexing-speed.html
  • 官方关于search性能优化方案

    • https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-search-speed.html
  • 官方关于mapping设置的一些限制

    • Mapping | Elasticsearch Guide [7.16] | Elastic
    • https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-settings-limit.html
  • 官方关于nested-field的一些限制

    • https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html#_limits_on_nested_mappings_and_objects
  • 使用enabled配置,只对数据进行保存,不进行index

    • https://www.elastic.co/guide/en/elasticsearch/reference/current/enabled.html
  • ebay的es性能优化实践

    • https://tech.ebayinc.com/engineering/elasticsearch-performance-tuning-practice-at-ebay/
  • 性能优化干货(和官方的基本类似)

    • https://developer.aliyun.com/article/706990

部分调优建议

  • 简单

    • 升级硬件性能,如要提升集群内纯大小,详细原因看后面
  • 中等

    • mapping优化(需review业务代码,修改IDE配置)

      • 不需要再es返回结果中出现的字段,不同步到es中

      • 需要在返回结果中出现,但不需要用于搜索的字段

        • 简化其mapping类型,特别是text->keyword、nested->object
        • 对字段不进行index,设置enabled: false
        • 通过自定义tokenizer 代替*搜索
    • 同步过程优化(需在IDE中实现)

      • 对不同步规模的index写数据时,动态调整每次批量写入的条目数,以及写完数据后sleep等待的时长(已实现)

      • 往ES写数据前修改index的refresh参数,或设置分区参数,写完数据再改回来

        • https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-indexing-speed.html#_unset_or_increase_the_refresh_interval
        • https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-indexing-speed.html#_disable_replicas_for_initial_loads
  • 复杂

    • mapping优化(需review业务代码,修改业务代码,修改IDE配置)

      • 根据数据查询场景,把复杂嵌套数据(nested)预处理成简单类型的数据(keyword或text等),预处理过程可以在业务代码进行,也可以用IDE的calculated field功能进行
      • 避免宽表,减少index到es的字段,只index需要用于查询的数据,其他数据通过es查到主键后再从db中获取

关于Nest 字段的影响

https://developer.aliyun.com/article/802096

结论: 对写入/更新速度比较大,nest 创建的子文档对硬盘size影响还好

分片,节点,索引占用磁盘大小和内存分析工具

使用help模式查看参数详情

GET _cat/segments?help
GET _cat/segments?v&h=index,si,sm
GET _cat/indices?help
GET _cat/indices?v
GET _cat/indices?v&h=i,dc,qcm,rcm,mtd,sm,fm,tm,sfbm 查看索引内存使用状况
GET _cat/nodes?help
GET _cat/nodes?v&h=rc
GET _cat/nodes?v&h=rc,sfbm注意rc参数 "used machine memory"这个值无论现在es里面有多少doc,这个值都接近服务器最大内存
GET _cat/nodes?h=name,fm,fcm,sm,qcm,im&v
查看节点磁盘占用
GET _cat/nodes?v&h=dt,du,r

查询语法优化时候注意事项:

  1. size问题 过大的size,设计时请尽量避免size问题
  2. query_string使用没使用default_field的时,请注意在query 的field 后面使用"( ) " 的问题,

一些带空格的string查询 和 OR 查询 在没有括号的时候,系统语法会将其解析为全文查询

Titanhouse t4.large 机型大概63万talent 会占满磁盘

关于写入速度,使用现有talent数据,在bulk api 500条每次情况下,会导致ingest node 压力较大,

在ingest node 磁盘空间不够时候还会造成index宕机

关于aws 机型对批量写入数据的影响数据

Es的机型的带宽,对批量写入数据 影响挺大,

之前用的r5.large 的机型 同步数据用的1000条一组没问题

刚才用m4.large的reIndex, 500条一次支持不了,一次的写入不能超过10MB。

  • https://docs.aws.amazon.com/opensearch-service/latest/developerguide/limits.html
  • https://stackoverflow.com/questions/28841221/what-is-the-maximum-elasticsearch-document-size

Elasticsearch 数据预热,数量量与内存大小关系

https://juejin.cn/post/6844903860125827086

Aws Elasticsearch 各实例的一些说明

https://docs.aws.amazon.com/opensearch-service/latest/developerguide/limits.html

Elasticsearch 数据量与查询性能关系测试设计

  1. 设计查询用例(有条件的项目可以直接从,cloudwatch 下载已有es query 用例进行测试)
  2. 复制数据到要测试的数量(百万,亿级别)
  3. 使用脚本对每组测试用例测试10遍,以求平均速度(应为存在数据预热问题,需要多跑几次,求平均速度),记录数据返回速度和返回体大小
  4. 统计分析查询结果发回速度,返回测试报告
  5. 顺便检测比较慢的查询,和返回体较大的结果,看是否能进行优化

相关内容

热门资讯

Git Actions自动发布... Git Actions自动发布部署,非最完善但足够完善和上手的一篇 文章最后附带完整...
【Java (一:12-4 D... DTD&schema 笔记记录一、DTD&schema1. xml约束分类DTD&schema1.1...
#ubuntu# #perf#... 关于 perf相关内容,抓取命令较多,当需要大量数据时每次输入命令会比较...
计算机图形学 | 可编程渲染管... 计算机图形学 | 可编程渲染管线计算机图形学 | 可编程渲染管线3.1 从固定到可编程图形编程的发展...
【FPGA实验2】二进制转为格... 关于FPGA入门实验2——二进制到格雷码的转换的一个记录 实验中作用到的仪器信息: 芯...
代码随想录算法训练营第四十九天... LeetCode 121 买卖股票的最佳时机题目链接:https://leetcode...
损失2亿美元后续,Euler正... 损失金额约2亿美元的Euler finance 闪电贷攻击已经成为2023年最大的去中心化金融黑客攻...
pb清空数组 1、 清空数组 string a[],b[] a[1] = '1';a[1] = '2';a[1] ...
嘉兴市联合上海证券交易所举办科... 为进一步拓宽科创企业融资渠道、优化发行机制,全力支持科技创新,5月30日,嘉兴市联合上海证券交易所举...
全网最详细,python接口自... 目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目...
专业、简单、稳定,融云重新定义... 艾瑞咨询《2023 年全球互联网通信云行业研究报告》(下简称《报告》)显...
没有Unity,没想到居然还有... 搞什么硬件,当然搞得是安卓手机当然多年前,哥是有去过中兴面试的ÿ...
OJ练习第52题——插入区间 插入区间 力扣链接:57.插入区间 题目描述 给你一个 无重叠的 ,按照...
【分享】为什么我设计的PCB很... 同事都很奇怪,为什么我设计的PCB都很少出错,而他们设计的PCB...
神经科学年鉴 | 全面综述情绪... 导读情绪是经历和行为的基础,影响和激励我们生活的方方面面。几个世纪以来,...
雅克比矩阵学习笔记 前置 假设f:Rn→Rmf:R_n\to R_mf:Rn​→Rm​是从nnn维欧氏空间线性映射到到m...
国产操作系统第一股,杨涛的麒麟... 文丨熔财经作者|星影随着chatGPT和AI技术的火热,国产芯片和操作系统能否适应人机...
原创 扛... 据报道,外交部副部长马朝旭与美国常务副国务卿兰多通电话的消息引发关注。尽管中美双方新闻稿内容简洁,但...
重大违法,强制退市,周五停牌 每天三分钟 公告很轻松 双林股份拟定增募资不超15亿元;光洋股份:终止购买银球科技100%股权等事项...
基于C++的AI五子棋游戏项目... 项目资源下载 基于C++的AI五子棋游戏项目源码压缩包下载地址基于C+...
人工智能能否取代软硬件开发工程... 版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog....
CGI编程 1.什么是CGI?   CGI是通用网关接口(Common Gateway Interface);是...
windows下远程连接aws... 一:安装或更新kubectlKubectl 是一个命令行工具,用于与 K...
jemeter-arthas做... jemeter-arthas做接口压测 一、jemeter 是一款压力测试工具,使用如...
maven的pom依赖配置介绍... 依赖模板 ch.qos.logbacklogback-classic1.4.4test
知识点梳理2408482-09... 基础产品数据(Basic Product Data):CA...
牛顿-拉弗森算法 这是一种迭代算法,为了求解多变量方程f⃗(x⃗)=0⃗\vec{f}(\vec...
linux clash部署 linux clash部署linux clash 部署使用一 环境二 下载1 下载2 解压三 配置1...
国科大计算机算法分析与设计1—... 写在前面 国科大算法复习的时候,想着复习一下平常的作业题,也正好记录一下...
提前涨停!这一A股控制权生变 ... 【导读】实控人丁福如筹划公司股份协议转让事宜,菲林格尔股票停牌中国基金报记者 牛思若5月30日,菲林...