本文主要涉及关于elastcisearch 关于内存,mapping,查询语句,系统性能查看方面基本的内容和一些调试方法的整理和收集。
官方关于index性能优化方案
官方关于search性能优化方案
官方关于mapping设置的一些限制
官方关于nested-field的一些限制
使用enabled配置,只对数据进行保存,不进行index
ebay的es性能优化实践
性能优化干货(和官方的基本类似)
简单
中等
mapping优化(需review业务代码,修改IDE配置)
不需要再es返回结果中出现的字段,不同步到es中
需要在返回结果中出现,但不需要用于搜索的字段
同步过程优化(需在IDE中实现)
对不同步规模的index写数据时,动态调整每次批量写入的条目数,以及写完数据后sleep等待的时长(已实现)
往ES写数据前修改index的refresh参数,或设置分区参数,写完数据再改回来
复杂
mapping优化(需review业务代码,修改业务代码,修改IDE配置)
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
查询语法优化时候注意事项:
一些带空格的string查询 和 OR 查询 在没有括号的时候,系统语法会将其解析为全文查询
Titanhouse t4.large 机型大概63万talent 会占满磁盘
关于写入速度,使用现有talent数据,在bulk api 500条每次情况下,会导致ingest node 压力较大,
在ingest node 磁盘空间不够时候还会造成index宕机
Es的机型的带宽,对批量写入数据 影响挺大,
之前用的r5.large 的机型 同步数据用的1000条一组没问题
刚才用m4.large的reIndex, 500条一次支持不了,一次的写入不能超过10MB。
https://juejin.cn/post/6844903860125827086
https://docs.aws.amazon.com/opensearch-service/latest/developerguide/limits.html