ES调试与优化工作笔记
Posted 每日摸鱼大王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES调试与优化工作笔记相关的知识,希望对你有一定的参考价值。
本文主要涉及关于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
查询语法优化时候注意事项:
- size问题 过大的size,设计时请尽量避免size问题
- 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 数据量与查询性能关系测试设计
- 设计查询用例(有条件的项目可以直接从,cloudwatch 下载已有es query 用例进行测试)
- 复制数据到要测试的数量(百万,亿级别)
- 使用脚本对每组测试用例测试10遍,以求平均速度(应为存在数据预热问题,需要多跑几次,求平均速度),记录数据返回速度和返回体大小
- 统计分析查询结果发回速度,返回测试报告
- 顺便检测比较慢的查询,和返回体较大的结果,看是否能进行优化
以上是关于ES调试与优化工作笔记的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch 源码解析与优化实战(张超)----笔记
Elasticsearch 源码解析与优化实战(张超)----笔记
elasticsearch检索,聚合,建模,优化--《elasticsearch核心技术与实战》笔记