Elasticsearch 写入优化探索:是什么影响了refresh 耗时?

简介: Elasticsearch 写入优化探索:是什么影响了refresh 耗时?

1、问题背景:

数据写入后,refresh耗时过长,能达到1s-5s。

想通过测试,探索确认影响refresh的因素,比如:写入操作是新增还是更新,deleted文档占比是否有影响,是否有其他索引配置,等等。

2、测试过程全记录

旧索引:24主分片,1副本,经过长期forcemerge,最大segmeng 33gb,镜像后deleted占比 8%左右。

noforcemerge 索引:24主分片,1副本,reindex后最大segmeng 5gb,deleted占比0%。

nosoftedelete 索引:关闭softdelete策略,24主分片,0副本,reindex后最大segmeng 5gb,deleted占比0%。


旧索引更新 旧索引新增 旧索引forcemerge后新增(带少量更新) noforcemerge索引更新 旧索引低更新 noforcemerge索引低更新 nosoftedelete索引更新
时间段 2023-10-12 21:30:00至2023-10-13 15:00:00 2023-10-13 15:55:00至2023-10-13 16:10:00 2023-10-13 20:40:00至2023-10-13 22:00:00 2023-10-16 10:40:00至2023-10-17 11:00:00 2023-10-17 16:20:00至2023-10-17 17:15:00 2023-10-17 17:20:00至2023-10-17 18:30:00 2023-10-19 11:00:00至今
写入速度 2k/s 2k/s 2k/s 2k/s 2k/s 2k/s 2k/s
deleted占比增长 最大 32%,最小 8% 22%左右 0%-2% 0%-9% 1.5%-2% 7%-6% 0%-8%
refresh耗时 最大12s,最低3s 200ms-400ms 300ms-800ms 1s-3s 50ms-250ms 500ms-1.5s 200ms-300ms
refresh_external耗时 最大12s,最低3s 200ms-400ms 300ms-800ms 1s-3s 50ms-250ms 500ms-1.5s 基本无
cpu使用 50%-100% 50%-100% 50%-100% 50%-100% 30%-60% 30%-60% 10%-40%(查询条件优化)

显示详细信息

3、查询测试

旧索引查询 noforcemerge索引查询
时间段 10-17 15:06:00 - 10-17 15:42:00
查询qps 100/s
查询耗时 平均45ms左右
cpu使用 10%-30%

4、观测到的现象

1.  纯更新操作会导致明显的 refresh 高耗时。

2.  降低索引中 deleted文档的占比也能降低refresh的高耗时。

3.  noforcemerge 索引的更新测试中,通过es热线程的抓取,refresh 的出现降低了(但依旧是100%),merge线程出现增多了不少。

4. soft delete 关闭的索引,refresh 耗时明显下降了,并且与 deleted 文档占比明显无关联。

5、测试初步结论

5.1 结论1. large segment 策略对索引日常使用无明显变化。

large segment 策略的修改对索引日常的查询和写入没有额外的资源占用。

同时也达到了预期自动清理deleted文档的效果。

5.2 结论2. refresh 影响因素。

  • 1.soft delete:soft delete模式是否开始直接影响refresh的耗时。关闭soft delete可降低refresh耗时,但不推荐。
  • 2.写入操作类型:开启 soft delete后,数据更新操作会明显增加 refresh耗时,而单纯的新增数据则没有太多的refresh耗时。
  • 3.deleted 占比:deleted 文档占比越高,refresh耗时越大。

6、扩展:关于soft delete

6.1 soft delete 用途

用于分片间数据同步和恢复,属于 ES 分布式基础实现。

具体内容详见:

https://www.elastic.co/guide/en/elasticsearch/reference/7.10/index-modules-history-retention.html

soft delete详解:默认为开启,只能在索引创建时设定,不可通过开关索引操作修改。官方后期准备把这个参数去掉,这也是不建议修改soft_delete参数的一个原因。

6.2 soft delete对 refresh 的影响

在测试过程以及社区文档中,均发现了soft_delete索引下 update 操作增加了refresh耗时的现象。

https://mp.weixin.qq.com/s/_l8JAtqK_NOSP8b7OqSVDg

作者介绍

金多安,Elastic 认证专家,Elastic资深运维工程师,死磕Elasticsearch知识星球嘉宾,星球Top活跃技术专家,搜索客社区日报责任编辑

铭毅天下审稿并做了部分微调。

推荐阅读


更短时间更快习得更多干货!

和全球 近2000+ Elastic 爱好者一起精进!

比同事抢先一步学习进阶干货!


相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
算法 索引
阿里云 Elasticsearch 使用 RRF 混排优化语义查询结果对比
Elasticsearch 从8.8版本开始,新增 RRF,支持对多种不同方式召回的多个结果集进行综合再排序,返回最终的排序结果。之前 Elasticsearch 已经分别支持基于 BM25 的相关性排序和向量相似度的召回排序,通过 RRF 可以对这两者的结果进行综合排序,可以提升排序的准确性。
3321 0
|
2月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
存储 缓存 固态存储
优化Elasticsearch 硬件配置
优化Elasticsearch 硬件配置
561 5
|
缓存 监控 安全
Elasticsearch扩展和优化
【11月更文挑战第4天】
257 6
|
存储 自然语言处理 Java
Elasticsearch写入优化
【10月更文挑战第3天】Elasticsearch:从写入原理谈写入优化
427 2
|
存储 缓存 监控
优化Elasticsearch 索引设计
优化Elasticsearch 索引设计
261 5
|
缓存 监控 安全
优化Elasticsearch 集群配置
优化Elasticsearch 集群配置
347 4
|
监控 负载均衡 安全
Elasticsearch集群配置优化
Elasticsearch集群配置优化
293 1
|
存储 缓存 监控
优化 Elasticsearch
优化 Elasticsearch
226 1
|
数据库 索引
Elasticsearch索引别名:管理与优化数据访问
Elasticsearch索引别名:管理与优化数据访问
346 2

热门文章

最新文章