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

1、问题背景:

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

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

9e8af36759727b8dee3dd0cb250b971b.jpeg

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:002023-10-13 15:55:00至2023-10-13 16:10:002023-10-13 20:40:00至2023-10-13 22:00:002023-10-16 10:40:00至2023-10-17 11:00:002023-10-17 16:20:00至2023-10-17 17:15:002023-10-17 17:20:00至2023-10-17 18:30:002023-10-19 11:00:00至今
写入速度2k/s2k/s2k/s2k/s2k/s2k/s2k/s
deleted占比增长最大 32%,最小 8%22%左右0%-2%0%-9%1.5%-2%7%-6%0%-8%
refresh耗时最大12s,最低3s200ms-400ms300ms-800ms1s-3s50ms-250ms500ms-1.5s200ms-300ms
refresh_external耗时最大12s,最低3s200ms-400ms300ms-800ms1s-3s50ms-250ms500ms-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
查询qps100/s
查询耗时平均45ms左右
cpu使用10%-30%

4、观测到的现象

c7aebcaa0f17bc1da168ed59f204d2d2.png cd642e33e98a9a21b32c2b14e537e63f.png

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耗时越大。

19add7524a34a83c65c1008eb5fa2ca8.png

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耗时的现象。

9cf449882f43580fc3af8a633dbf7cf6.png

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

173e9ca9e721e7f1e97a912e491175b9.png

作者介绍

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

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

推荐阅读

  1. 全网首发!从 0 到 1 Elasticsearch 8.X 通关视频

  2. 重磅 | 死磕 Elasticsearch 8.X 方法论认知清单

  3. 如何系统的学习 Elasticsearch ?

  4. 2023,做点事

df35ee4687046372a44d7544449bd4d6.jpeg

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

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

c12f5a99801cff949d27ba57600f6ca9.gif

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/297491.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

尊敬的读者: 网络安全是当今数字时代的一大挑战,各种勒索病毒如.halo病毒层出不穷,对用户和企业的数据安全构成了严重威胁。本文将介绍.halo勒索病毒,以及如何恢复被其加密的数据文件,同时提供预防措施。在面对被勒索…

软件测试工程师简历项目经验怎么写?--1000个已成功入职的软件测试工程师简历范文模板(含真实简历)

说到好的测试人员的简历,其实并没有什么标准。因为每个人的简历都是根据自己的个人情况、个人目标而编写的,所以只有合适的简历,没有什么所谓的好的简历。拿经历来说吧:做培训的时候,要给每一个学员辅导,教…

Java中的Stream流收集器

目录 1、归约和汇总 2、分组 3、分区 4、理解收集器接口 Java 中 Stream 流用来帮助处理集合,类似于数据库中的操作。 在 Stream 接口中,有一个抽象方法 collect,你会发现 collect 是一个归约操作(高级规约)&#…

2023航天推进理论基础考试划重点(W老师)-液体火箭发动机1

适用于期末周求生欲满满的西北工业大学学生。 1、液体火箭发动机的基本组成及功能是什么? 推力室组件、推进剂供应系统、阀门与调节器、发动机总装元件等组成。 2、液体火箭发动机的分类和应用是什么?3、液体火箭发动机系统、分系统的概念是什么&…

微前端——无界wujie

B站课程视频 课程视频 课程课件笔记: 1.微前端 2.无界 现有的微前端框架:iframe、qiankun、Micro-app(京东)、EMP(百度)、无届 前置 初始化 新建一个文件夹 1.通过npm i typescript -g安装ts 2.然后可…

Unity-Shader-渲染队列

Unity-Shader-渲染队列 渲染简介Unity中的几种渲染队列Background (1000)最早被渲染的物体的队列。Geometry (2000) 不透明物体的渲染队列。大多数物体都应该使用该队列进行渲染,也就是Unity Shader中默认的渲染队列。AlphaTest (2450) 有透明通道,需要进…

社会人士可以考英语四六级吗?怎么考四六级

目录 一、社会人士能考英语四六级吗二、社会人士可以参加哪些英语等级考试第一.考个商务英语类证书第二.社会上比较认可的还有翻译证书第三.出国常用的英语凭证第四.职称英语.第五.PETS. 大学英语四六级是为提高我国大学英语课程的教学质量服务。那么社会人士能不能报考英语四六…

【Python从入门到进阶】45、Scrapy框架核心组件介绍

接上篇《44、Scrapy的基本介绍和安装》 上一篇我们学习了Scrapy框架的基础介绍以及环境的搭建,本篇我们来学习一下Scrapy框架的核心组件的使用。 下面的核心组件的介绍,仍是基于这幅图的机制,大家可以再回顾一下: 注:…

设计模式 建造者模式 与 Spring Bean建造者 BeanDefinitionBuilder 源码与应用

建造者模式 定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示主要作用: 在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象如何使用: 用户只需要给出指定复杂对象的类型和内容, 建造者模式负责按顺序创建复杂对象…

Spring Cloud + Vue前后端分离-第7章 核心业务功能开发

Spring Cloud Vue前后端分离-第7章 核心业务功能开发 7-1 课程管理功能开发 课程管理页面美化 1.课程管理页面美化 demo-course.jpg 复制search.html中的部分代码 course.vue 看效果 测试一下新增修改删除效果 1.课程管理页面美化2 scoped:style下的样式只应用于当前组件…

BUG记录 | 使用阿里云OSS实现文件上传后,得到的url无法在浏览器中打开

项目背景 SpringBoot的项目,使用阿里云对象存储OSS对项目中的文件进行存储,所需文件也会通过IDEA中由官方Demo改编而成的工具类作为接口,调用接口后上传 问题描述 使用阿里云OSS实现文件上传后,通过postman测试得到的url无法在…

MyBatis动态sql中foreach标签介绍和使用

MyBatis动态sql中foreach标签介绍和使用 参数解释: foreach 的主要作用在构建 in 条件中,它可以在 sql 语句中进行迭代一个集合。foreach 元素的属性主要有 collection,item,separator,index,open&#x…